From 60e88fd56d98d20e31c95cc13d1b68a7979963fb Mon Sep 17 00:00:00 2001 From: mine_diver Date: Fri, 3 Jan 2025 20:02:36 +0500 Subject: [PATCH 1/6] Cleaned up Java hacks related to entrypoints --- src/main/resources/fabric.mod.json | 2 +- .../modificationstation/sltest/SLTest.java | 12 +- .../sltest/block/Blocks.java | 4 +- .../sltest/datafixer/DataFixerListener.java | 4 +- .../sltest/dimension/DimensionListener.java | 4 +- .../achievement/AchievementPageImpl.java | 4 +- .../stationapi/api/StationAPI.java | 12 +- .../api/mod/entrypoint/EntrypointManager.java | 32 +++-- .../stationapi/api/util/Namespace.java | 124 ++++++++++++++++++ .../stationapi/api/util/ReflectionHelper.java | 58 ++------ .../impl/mod/DeprecatedInitEventsImpl.java | 4 +- .../impl/block/BlockFormOnlyHandler.java | 4 +- .../block/HasCustomBlockItemFactoryImpl.java | 4 +- .../impl/block/HasMetaBlockItemImpl.java | 4 +- .../impl/block/HasMetaNamedBlockItemImpl.java | 4 +- .../network/GuiClientNetworkHandler.java | 4 +- .../network/EntityClientNetworkHandler.java | 4 +- .../server/entity/CustomTrackingImpl.java | 4 +- .../server/entity/TrackingParametersImpl.java | 4 +- .../stationapi/api/block/States.java | 4 +- .../trackers/vanilla/BlockItemTracker.java | 3 +- .../impl/block/BlockInteractionImpl.java | 4 +- .../impl/block/PlacementStateImpl.java | 4 +- .../impl/world/WorldDataVersionImpl.java | 4 +- .../gui/screen/EditWorldScreenImpl.java | 4 +- .../container/CustomTooltipRendererImpl.java | 4 +- .../render/item/CustomItemOverlayImpl.java | 4 +- .../dispenser/CustomDispenseBehaviorImpl.java | 4 +- .../entity/player/ItemCustomReachImpl.java | 4 +- .../resource/language/LanguageManager.java | 13 +- .../network/packet/StationNetworkingInit.java | 4 +- .../impl/recipe/JsonRecipeParserInit.java | 4 +- .../impl/recipe/JsonRecipesLoader.java | 4 +- .../json/JsonRecipeParserRegisterImpl.java | 4 +- .../sync/trackers/BooleanArrayTracker.java | 3 +- .../sync/trackers/Int2ObjectMapTracker.java | 3 +- .../sync/trackers/IntArrayTracker.java | 3 +- .../sync/trackers/ObjectArrayTracker.java | 3 +- .../trackers/RemappableEntryArrayTracker.java | 3 +- .../sync/trackers/StateIdTracker.java | 3 +- .../impl/registry/TagReloaderImpl.java | 4 +- .../impl/registry/WorldRegistryRemapper.java | 4 +- .../registry/ClientRegistryRestorer.java | 4 +- .../ClientServerRegistryRemapper.java | 4 +- .../impl/network/RegistryNetworkingInit.java | 4 +- .../server/registry/ServerRegistrySender.java | 4 +- .../registry/ServerRegistrySynchronizer.java | 4 +- .../client/texture/StationRenderImpl.java | 11 +- .../impl/client/arsenic/Arsenic.java | 8 +- .../client/resource/AssetsReloaderImpl.java | 4 +- .../impl/resource/DataReloaderImpl.java | 4 +- .../impl/item/HijackShearsImplV1.java | 4 +- .../client/network/ClientVanillaChecker.java | 4 +- .../impl/network/VanillaChecker.java | 4 +- .../server/network/ServerVanillaChecker.java | 4 +- .../vanillafix/block/VanillaBlockFixImpl.java | 4 +- .../block/VanillaBlockColorProviders.java | 4 +- .../gui/screen/EditWorldScreenImpl.java | 4 +- .../datafixer/VanillaDataFixerImpl.java | 4 +- .../dimension/VanillaDimensionFixImpl.java | 4 +- .../vanillafix/item/VanillaItemFixImpl.java | 4 +- .../recipe/VanillaFuelItemFixImpl.java | 4 +- 62 files changed, 279 insertions(+), 198 deletions(-) diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index fac17cc49..b180c0782 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -20,7 +20,7 @@ "environment": "*", "depends": { - "java": "17", + "java": ">=17", "fabricloader": "*", "minecraft": "1.0.0-beta.7.3", "station-registry-api-v0": "*", diff --git a/src/test/java/net/modificationstation/sltest/SLTest.java b/src/test/java/net/modificationstation/sltest/SLTest.java index 1c7c4c9df..4d4d96d59 100644 --- a/src/test/java/net/modificationstation/sltest/SLTest.java +++ b/src/test/java/net/modificationstation/sltest/SLTest.java @@ -6,21 +6,13 @@ import net.mine_diver.unsafeevents.listener.EventListener; import net.mine_diver.unsafeevents.listener.ListenerPriority; import net.modificationstation.stationapi.api.event.mod.InitEvent; -import net.modificationstation.stationapi.api.mod.entrypoint.Entrypoint; import net.modificationstation.stationapi.api.util.Namespace; -import net.modificationstation.stationapi.api.util.Null; import org.apache.logging.log4j.Logger; public class SLTest { + public static final Namespace NAMESPACE = Namespace.resolve(); - @Entrypoint.Logger - public static final Logger LOGGER = Null.get(); - - @Entrypoint.Instance - public static final SLTest INSTANCE = Null.get(); - - @Entrypoint.Namespace - public static final Namespace NAMESPACE = Null.get(); + public static final Logger LOGGER = NAMESPACE.getLogger(); @EventListener public void init(InitEvent event) { diff --git a/src/test/java/net/modificationstation/sltest/block/Blocks.java b/src/test/java/net/modificationstation/sltest/block/Blocks.java index a86479b9c..882fd7902 100644 --- a/src/test/java/net/modificationstation/sltest/block/Blocks.java +++ b/src/test/java/net/modificationstation/sltest/block/Blocks.java @@ -1,11 +1,11 @@ package net.modificationstation.sltest.block; import net.mine_diver.unsafeevents.listener.EventListener; -import net.mine_diver.unsafeevents.listener.Listener; import net.minecraft.block.Block; import net.minecraft.block.Material; import net.modificationstation.sltest.mixin.BlockBaseAccessor; import net.modificationstation.stationapi.api.event.registry.BlockRegistryEvent; +import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; import net.modificationstation.stationapi.api.template.block.TemplateBlock; import net.modificationstation.stationapi.api.util.Identifier; @@ -40,7 +40,7 @@ public Block get() { public static class Init { static { - Listener.registerLookup(MethodHandles.lookup()); + EntrypointManager.registerLookup(MethodHandles.lookup()); } @EventListener diff --git a/src/test/java/net/modificationstation/sltest/datafixer/DataFixerListener.java b/src/test/java/net/modificationstation/sltest/datafixer/DataFixerListener.java index e98c66547..de17ef907 100644 --- a/src/test/java/net/modificationstation/sltest/datafixer/DataFixerListener.java +++ b/src/test/java/net/modificationstation/sltest/datafixer/DataFixerListener.java @@ -1,9 +1,9 @@ package net.modificationstation.sltest.datafixer; import net.mine_diver.unsafeevents.listener.EventListener; -import net.mine_diver.unsafeevents.listener.Listener; import net.minecraft.nbt.NbtCompound; import net.modificationstation.stationapi.api.event.datafixer.DataFixerRegisterEvent; +import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; import net.modificationstation.stationapi.api.util.Util; import java.lang.invoke.MethodHandles; @@ -13,7 +13,7 @@ public class DataFixerListener { static { - Listener.registerLookup(MethodHandles.lookup()); + EntrypointManager.registerLookup(MethodHandles.lookup()); } @EventListener diff --git a/src/test/java/net/modificationstation/sltest/dimension/DimensionListener.java b/src/test/java/net/modificationstation/sltest/dimension/DimensionListener.java index 24e45f194..23e4e20de 100644 --- a/src/test/java/net/modificationstation/sltest/dimension/DimensionListener.java +++ b/src/test/java/net/modificationstation/sltest/dimension/DimensionListener.java @@ -1,8 +1,8 @@ package net.modificationstation.sltest.dimension; import net.mine_diver.unsafeevents.listener.EventListener; -import net.mine_diver.unsafeevents.listener.Listener; import net.modificationstation.stationapi.api.event.registry.DimensionRegistryEvent; +import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; import net.modificationstation.stationapi.api.registry.DimensionContainer; import net.modificationstation.stationapi.api.registry.DimensionRegistry; @@ -13,7 +13,7 @@ public class DimensionListener { static { - Listener.registerLookup(MethodHandles.lookup()); + EntrypointManager.registerLookup(MethodHandles.lookup()); } @EventListener diff --git a/station-achievements-v0/src/main/java/net/modificationstation/stationapi/impl/client/gui/screen/achievement/AchievementPageImpl.java b/station-achievements-v0/src/main/java/net/modificationstation/stationapi/impl/client/gui/screen/achievement/AchievementPageImpl.java index e9f7fb7ca..e8f06c59d 100644 --- a/station-achievements-v0/src/main/java/net/modificationstation/stationapi/impl/client/gui/screen/achievement/AchievementPageImpl.java +++ b/station-achievements-v0/src/main/java/net/modificationstation/stationapi/impl/client/gui/screen/achievement/AchievementPageImpl.java @@ -2,7 +2,6 @@ import net.fabricmc.loader.api.FabricLoader; import net.mine_diver.unsafeevents.listener.EventListener; -import net.mine_diver.unsafeevents.listener.Listener; import net.minecraft.achievement.Achievement; import net.minecraft.achievement.Achievements; import net.minecraft.client.Minecraft; @@ -11,6 +10,7 @@ import net.modificationstation.stationapi.api.client.gui.screen.achievement.AchievementPage; import net.modificationstation.stationapi.api.event.achievement.AchievementRegisterEvent; import net.modificationstation.stationapi.api.mod.entrypoint.Entrypoint; +import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; import net.modificationstation.stationapi.api.mod.entrypoint.EventBusPolicy; import java.lang.invoke.MethodHandles; @@ -22,7 +22,7 @@ @EventListener(phase = StationAPI.INTERNAL_PHASE) public class AchievementPageImpl { static { - Listener.registerLookup(MethodHandles.lookup()); + EntrypointManager.registerLookup(MethodHandles.lookup()); } @EventListener diff --git a/station-api-base/src/main/java/net/modificationstation/stationapi/api/StationAPI.java b/station-api-base/src/main/java/net/modificationstation/stationapi/api/StationAPI.java index 9224c750a..d3a8fd949 100644 --- a/station-api-base/src/main/java/net/modificationstation/stationapi/api/StationAPI.java +++ b/station-api-base/src/main/java/net/modificationstation/stationapi/api/StationAPI.java @@ -10,7 +10,6 @@ import net.modificationstation.stationapi.api.mod.entrypoint.EventBusPolicy; import net.modificationstation.stationapi.api.util.Identifier; import net.modificationstation.stationapi.api.util.Namespace; -import net.modificationstation.stationapi.api.util.Null; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.core.config.Configurator; @@ -25,20 +24,12 @@ registerStatic = false )) public class StationAPI implements PreLaunchEntrypoint { - /** - * StationAPI's instance. - */ - @Entrypoint.Instance - public static final StationAPI INSTANCE = Null.get(); - /** * StationAPI's namespace. */ - @Entrypoint.Namespace public static final Namespace NAMESPACE = Namespace.of("stationapi"); - @Entrypoint.Logger("Station|API") - public static final Logger LOGGER = Null.get(); + public static final Logger LOGGER = NAMESPACE.getLogger("Station|API"); @ApiStatus.Internal public static final String INTERNAL_PHASE = "stationapi:internal"; @@ -53,7 +44,6 @@ public class StationAPI implements PreLaunchEntrypoint { */ @Override public void onPreLaunch() { - FabricLoader.getInstance().getModContainer("stationapi").ifPresent(modContainer -> EntrypointManager.setup(this, modContainer)); String name = NAMESPACE.getName(); LOGGER.info("Initializing " + name + "..."); Configurator.setLevel("mixin", Level.TRACE); diff --git a/station-api-base/src/main/java/net/modificationstation/stationapi/api/mod/entrypoint/EntrypointManager.java b/station-api-base/src/main/java/net/modificationstation/stationapi/api/mod/entrypoint/EntrypointManager.java index 0afd32b2f..51bc3ac72 100644 --- a/station-api-base/src/main/java/net/modificationstation/stationapi/api/mod/entrypoint/EntrypointManager.java +++ b/station-api-base/src/main/java/net/modificationstation/stationapi/api/mod/entrypoint/EntrypointManager.java @@ -1,5 +1,8 @@ package net.modificationstation.stationapi.api.mod.entrypoint; +import it.unimi.dsi.fastutil.objects.Reference2ReferenceMap; +import it.unimi.dsi.fastutil.objects.Reference2ReferenceOpenHashMap; +import lombok.val; import net.fabricmc.loader.api.ModContainer; import net.fabricmc.loader.api.entrypoint.EntrypointContainer; import net.mine_diver.unsafeevents.Event; @@ -7,11 +10,8 @@ import net.modificationstation.stationapi.api.StationAPI; import net.modificationstation.stationapi.api.util.Namespace; import net.modificationstation.stationapi.api.util.ReflectionHelper; -import org.apache.logging.log4j.Level; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.core.config.Configurator; -import org.apache.logging.log4j.message.ParameterizedMessageFactory; +import java.lang.invoke.MethodHandles; import java.lang.reflect.Method; import java.util.function.Consumer; @@ -20,6 +20,13 @@ * @author mine_diver */ public class EntrypointManager { + private static final Reference2ReferenceMap, MethodHandles.Lookup> LOOKUPS = new Reference2ReferenceOpenHashMap<>(); + + public static void registerLookup(MethodHandles.Lookup lookup) { + Listener.registerLookup(lookup); + LOOKUPS.put(lookup.lookupClass(), lookup); + } + /** * Performs the setup of entrypoint, such as: * - Registration of EventBus listeners. @@ -79,19 +86,18 @@ else if (o instanceof Method listener) .listener(o) .build() ); + val lookup = LOOKUPS.getOrDefault(o.getClass(), MethodHandles.publicLookup()); try { - ReflectionHelper.setFieldsWithAnnotation(o, Entrypoint.Instance.class, o); - ReflectionHelper.setFieldsWithAnnotation(o, Entrypoint.Namespace.class, namespace -> namespace.value().isEmpty() ? Namespace.of(modContainer) : Namespace.of(namespace.value())); - ReflectionHelper.setFieldsWithAnnotation(o, Entrypoint.Logger.class, logger -> { - String name = logger.value().isEmpty() ? modContainer.getMetadata().getId() + "|Mod" : logger.value(); - org.apache.logging.log4j.Logger log = LogManager.getLogger(name, ParameterizedMessageFactory.INSTANCE); - Configurator.setLevel(name, Level.INFO); - return log; + ReflectionHelper.setFieldsWithAnnotation(lookup, o, Entrypoint.Instance.class, o); + ReflectionHelper.setFieldsWithAnnotation(lookup, o, Entrypoint.Namespace.class, namespace -> namespace.value().isEmpty() ? Namespace.of(modContainer) : Namespace.of(namespace.value())); + ReflectionHelper.setFieldsWithAnnotation(lookup, o, Entrypoint.Logger.class, logger -> { + val namespace = Namespace.of(modContainer); + val name = logger.value(); + return name.isEmpty() ? namespace.getLogger() : namespace.getLogger(name); }); - } catch (IllegalAccessException e) { + } catch (IllegalAccessException | NoSuchFieldException e) { throw new RuntimeException(e); } } } - } \ No newline at end of file diff --git a/station-api-base/src/main/java/net/modificationstation/stationapi/api/util/Namespace.java b/station-api-base/src/main/java/net/modificationstation/stationapi/api/util/Namespace.java index 1ce30760e..a8dfb178d 100644 --- a/station-api-base/src/main/java/net/modificationstation/stationapi/api/util/Namespace.java +++ b/station-api-base/src/main/java/net/modificationstation/stationapi/api/util/Namespace.java @@ -2,15 +2,38 @@ import com.github.benmanes.caffeine.cache.Cache; import com.github.benmanes.caffeine.cache.Caffeine; +import com.google.common.base.Suppliers; +import it.unimi.dsi.fastutil.objects.Object2ReferenceMap; +import it.unimi.dsi.fastutil.objects.Object2ReferenceOpenHashMap; +import it.unimi.dsi.fastutil.objects.Reference2ReferenceMap; +import it.unimi.dsi.fastutil.objects.Reference2ReferenceOpenHashMap; +import lombok.extern.slf4j.Slf4j; +import lombok.val; import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.ModContainer; import net.fabricmc.loader.api.Version; import net.fabricmc.loader.api.metadata.ModMetadata; import net.modificationstation.stationapi.api.util.exception.MissingModException; +import org.apache.logging.log4j.Level; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.core.config.Configurator; +import org.apache.logging.log4j.message.ParameterizedMessageFactory; +import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.nio.file.FileSystems; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.function.Function; +import java.util.function.Supplier; +import java.util.stream.Stream; +@Slf4j public final class Namespace implements Comparable<@NotNull Namespace> { private static final boolean CHECK_MISSING_MODS = false; @@ -19,6 +42,8 @@ public final class Namespace implements Comparable<@NotNull Namespace> { @NotNull private static final Function<@NotNull String, @NotNull Namespace> NAMESPACE_FACTORY = Namespace::new; + private static final Reference2ReferenceMap, Namespace> CLASS_CACHE = new Reference2ReferenceOpenHashMap<>(); + @NotNull public static final Namespace MINECRAFT = of("minecraft"); @@ -34,15 +59,102 @@ public final class Namespace implements Comparable<@NotNull Namespace> { return CACHE.get(namespace, NAMESPACE_FACTORY); } + @ApiStatus.Experimental + public static @NotNull Namespace resolve() { + return CLASS_CACHE.computeIfAbsent( + StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE).getCallerClass(), + (Class caller) -> { + final Path callerPath; + try { + callerPath = Paths.get(caller.getProtectionDomain().getCodeSource().getLocation().toURI()); + } catch (URISyntaxException e) { + throw new RuntimeException(e); + } + + val mods = FabricLoader.getInstance().getAllMods().stream(); + final Stream candidates; + + // i'm so sorry + if (Files.isRegularFile(callerPath)) { // regular case + final URI callerRoot; + try (val fs = FileSystems.newFileSystem(callerPath)) { + callerRoot = fs.getPath("/").toUri(); + } catch (IOException e) { + throw new RuntimeException(e); + } + candidates = mods + .filter(modContainer -> modContainer.getRootPaths() + .stream() + .filter(Files::isDirectory) + .map(Path::toUri) + .anyMatch(callerRoot::equals) + ); + } else if (Files.isDirectory(callerPath)) { // most likely a development environment + candidates = mods + .filter(modContainer -> modContainer.getRootPaths() + .stream() + .filter(Files::isDirectory) + .anyMatch(path -> { + Path pathName; + val nameCount = path.getNameCount(); + + // IntelliJ build path test + if (nameCount > 0) { + pathName = path.getFileName(); + if (pathName.toString().equals("resources")) + return path.getParent().resolve("classes").equals(callerPath); + } + + // Gradle build path test + if (nameCount > 2) { + val resources = path.getParent(); + pathName = resources.getFileName(); + if (pathName.toString().equals("resources")) { + try (val walk = Files.walk( + resources.getParent().resolve("classes"), 2 + )) { + if (walk.anyMatch(callerPath::equals)) return true; + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } + + return false; + }) + ); + } else candidates = Stream.empty(); + + return of(candidates + .findAny() + .orElseThrow(() -> new IllegalCallerException(""" + Class "%s" has attempted to resolve its namespace, \ + but it's either not a part of a mod, \ + or was loaded in an unusual way. \ + Class's location resolves to "%s".\ + """ + .formatted( + caller.getName(), + callerPath.toUri() + ) + )) + .getMetadata() + .getId() + ); + }); + } + @NotNull private final String namespace; private final int hashCode; + private final Supplier> loggers; private Namespace(@NotNull final String namespace) { if (CHECK_MISSING_MODS && !FabricLoader.getInstance().isModLoaded(namespace)) throw new MissingModException(namespace); this.namespace = namespace; hashCode = toString().hashCode(); + loggers = Suppliers.memoize(Object2ReferenceOpenHashMap::new); } public @NotNull ModContainer getContainer() { @@ -65,6 +177,18 @@ private Namespace(@NotNull final String namespace) { return Identifier.of(this, id); } + public @NotNull Logger getLogger() { + return getLogger(namespace + "|Mod"); + } + + public @NotNull Logger getLogger(String name) { + return loggers.get().computeIfAbsent(name, (String s) -> { + val log = LogManager.getLogger(s, ParameterizedMessageFactory.INSTANCE); + Configurator.setLevel(s, Level.INFO); + return log; + }); + } + @Override public boolean equals(@NotNull final Object other) { if (this == other) return true; diff --git a/station-api-base/src/main/java/net/modificationstation/stationapi/api/util/ReflectionHelper.java b/station-api-base/src/main/java/net/modificationstation/stationapi/api/util/ReflectionHelper.java index 87468fc7f..4a665dde0 100644 --- a/station-api-base/src/main/java/net/modificationstation/stationapi/api/util/ReflectionHelper.java +++ b/station-api-base/src/main/java/net/modificationstation/stationapi/api/util/ReflectionHelper.java @@ -1,44 +1,31 @@ package net.modificationstation.stationapi.api.util; -import sun.misc.Unsafe; - import java.lang.annotation.Annotation; import java.lang.invoke.MethodHandles; -import java.lang.invoke.VarHandle; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.Arrays; import java.util.function.Function; public class ReflectionHelper { - private static final VarHandle modifiers; - - static { - try { - Unsafe unsafe = UnsafeProvider.theUnsafe; - Field implLookupField = MethodHandles.Lookup.class.getDeclaredField("IMPL_LOOKUP"); - MethodHandles.Lookup lookup = (MethodHandles.Lookup) unsafe.getObject(unsafe.staticFieldBase(implLookupField), unsafe.staticFieldOffset(implLookupField)); - modifiers = lookup.findVarHandle(Field.class, "modifiers", int.class); - } catch (NoSuchFieldException | IllegalAccessException e) { - throw new RuntimeException(e); - } + public static void setFieldsWithAnnotation(MethodHandles.Lookup lookup, Object target, Class annotation, Object value) throws IllegalAccessException, NoSuchFieldException { + setFieldsWithAnnotation(lookup, target.getClass(), target, annotation, value); } - public static void setFieldsWithAnnotation(Object target, Class annotation, Object value) throws IllegalAccessException { - setFieldsWithAnnotation(target.getClass(), target, annotation, value); + public static void setFieldsWithAnnotation(MethodHandles.Lookup lookup, Class targetClass, Object target, Class annotation, Object value) throws IllegalAccessException, NoSuchFieldException { + setFieldsWithAnnotation(lookup, targetClass, target, annotation, annotation1 -> value); } - public static void setFieldsWithAnnotation(Class targetClass, Object target, Class annotation, Object value) throws IllegalAccessException { - setFieldsWithAnnotation(targetClass, target, annotation, annotation1 -> value); + public static void setFieldsWithAnnotation(MethodHandles.Lookup lookup, Object target, Class annotation, Function processor) throws IllegalAccessException, NoSuchFieldException { + setFieldsWithAnnotation(lookup, target.getClass(), target, annotation, processor); } - public static void setFieldsWithAnnotation(Object target, Class annotation, Function processor) throws IllegalAccessException { - setFieldsWithAnnotation(target.getClass(), target, annotation, processor); - } - - public static void setFieldsWithAnnotation(Class targetClass, Object target, Class annotation, Function processor) throws IllegalAccessException { - for (Field field : ReflectionHelper.getFieldsWithAnnotation(targetClass, annotation)) - ReflectionHelper.setPrivateFinalField(field, target, processor.apply(field.getAnnotation(annotation))); + public static void setFieldsWithAnnotation(MethodHandles.Lookup lookup, Class targetClass, Object target, Class annotation, Function processor) throws IllegalAccessException, NoSuchFieldException { + for (Field field : getFieldsWithAnnotation(targetClass, annotation)) + if (Modifier.isStatic(field.getModifiers())) + lookup.findStaticVarHandle(targetClass, field.getName(), field.getType()).set(processor.apply(field.getAnnotation(annotation))); + else + lookup.findVarHandle(targetClass, field.getName(), field.getType()).set(target, processor.apply(field.getAnnotation(annotation))); } public static Field[] getFieldsWithAnnotation(Class targetClass, Class annotationClass) { @@ -50,25 +37,4 @@ public static Field[] getFieldsWithAnnotation(Class targetClass, Class AIR_BLOCK = Suppliers.memoize(() -> new Air(0)); diff --git a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/api/registry/sync/trackers/vanilla/BlockItemTracker.java b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/api/registry/sync/trackers/vanilla/BlockItemTracker.java index 3c89c79f1..d9f66164e 100644 --- a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/api/registry/sync/trackers/vanilla/BlockItemTracker.java +++ b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/api/registry/sync/trackers/vanilla/BlockItemTracker.java @@ -5,6 +5,7 @@ import net.minecraft.item.BlockItem; import net.minecraft.item.Item; import net.modificationstation.stationapi.api.event.registry.RegistryEntryAddedEvent; +import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; import net.modificationstation.stationapi.api.registry.ListenableRegistry; import net.modificationstation.stationapi.api.registry.Registry; @@ -12,7 +13,7 @@ public final class BlockItemTracker { static { - Listener.registerLookup(MethodHandles.lookup()); + EntrypointManager.registerLookup(MethodHandles.lookup()); } private BlockItemTracker() { } diff --git a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/impl/block/BlockInteractionImpl.java b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/impl/block/BlockInteractionImpl.java index 7abf61833..f713d1712 100644 --- a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/impl/block/BlockInteractionImpl.java +++ b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/impl/block/BlockInteractionImpl.java @@ -1,11 +1,11 @@ package net.modificationstation.stationapi.impl.block; import net.mine_diver.unsafeevents.listener.EventListener; -import net.mine_diver.unsafeevents.listener.Listener; import net.modificationstation.stationapi.api.StationAPI; import net.modificationstation.stationapi.api.block.BeforeBlockRemoved; import net.modificationstation.stationapi.api.event.block.BlockEvent; import net.modificationstation.stationapi.api.mod.entrypoint.Entrypoint; +import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; import net.modificationstation.stationapi.api.mod.entrypoint.EventBusPolicy; import java.lang.invoke.MethodHandles; @@ -14,7 +14,7 @@ @EventListener(phase = StationAPI.INTERNAL_PHASE) public final class BlockInteractionImpl { static { - Listener.registerLookup(MethodHandles.lookup()); + EntrypointManager.registerLookup(MethodHandles.lookup()); } @EventListener diff --git a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/impl/block/PlacementStateImpl.java b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/impl/block/PlacementStateImpl.java index ff5f1b8b1..e7aa309ea 100644 --- a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/impl/block/PlacementStateImpl.java +++ b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/impl/block/PlacementStateImpl.java @@ -1,7 +1,6 @@ package net.modificationstation.stationapi.impl.block; import net.mine_diver.unsafeevents.listener.EventListener; -import net.mine_diver.unsafeevents.listener.Listener; import net.minecraft.util.hit.HitResult; import net.minecraft.util.math.Vec3d; import net.modificationstation.stationapi.api.StationAPI; @@ -9,6 +8,7 @@ import net.modificationstation.stationapi.api.event.block.BlockEvent; import net.modificationstation.stationapi.api.item.ItemPlacementContext; import net.modificationstation.stationapi.api.mod.entrypoint.Entrypoint; +import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; import net.modificationstation.stationapi.api.mod.entrypoint.EventBusPolicy; import java.lang.invoke.MethodHandles; @@ -17,7 +17,7 @@ @EventListener(phase = StationAPI.INTERNAL_PHASE) public final class PlacementStateImpl { static { - Listener.registerLookup(MethodHandles.lookup()); + EntrypointManager.registerLookup(MethodHandles.lookup()); } @EventListener diff --git a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/impl/world/WorldDataVersionImpl.java b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/impl/world/WorldDataVersionImpl.java index 608abb33a..5502f59c8 100644 --- a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/impl/world/WorldDataVersionImpl.java +++ b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/impl/world/WorldDataVersionImpl.java @@ -2,12 +2,12 @@ import com.google.common.collect.Iterators; import net.mine_diver.unsafeevents.listener.EventListener; -import net.mine_diver.unsafeevents.listener.Listener; import net.minecraft.nbt.NbtCompound; import net.minecraft.nbt.NbtElement; import net.modificationstation.stationapi.api.StationAPI; import net.modificationstation.stationapi.api.event.world.WorldPropertiesEvent; import net.modificationstation.stationapi.api.mod.entrypoint.Entrypoint; +import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; import net.modificationstation.stationapi.api.mod.entrypoint.EventBusPolicy; import net.modificationstation.stationapi.api.nbt.NbtHelper; import net.modificationstation.stationapi.mixin.nbt.NbtCompoundAccessor; @@ -19,7 +19,7 @@ @EventListener(phase = StationAPI.INTERNAL_PHASE) public final class WorldDataVersionImpl { static { - Listener.registerLookup(MethodHandles.lookup()); + EntrypointManager.registerLookup(MethodHandles.lookup()); } @EventListener diff --git a/station-gui-api-v0/src/main/java/net/modificationstation/stationapi/impl/client/gui/screen/EditWorldScreenImpl.java b/station-gui-api-v0/src/main/java/net/modificationstation/stationapi/impl/client/gui/screen/EditWorldScreenImpl.java index b573d5cb3..88d94a2bc 100644 --- a/station-gui-api-v0/src/main/java/net/modificationstation/stationapi/impl/client/gui/screen/EditWorldScreenImpl.java +++ b/station-gui-api-v0/src/main/java/net/modificationstation/stationapi/impl/client/gui/screen/EditWorldScreenImpl.java @@ -1,7 +1,6 @@ package net.modificationstation.stationapi.impl.client.gui.screen; import net.mine_diver.unsafeevents.listener.EventListener; -import net.mine_diver.unsafeevents.listener.Listener; import net.minecraft.client.gui.screen.world.EditWorldScreen; import net.minecraft.client.gui.widget.ButtonWidget; import net.minecraft.client.resource.language.I18n; @@ -9,6 +8,7 @@ import net.modificationstation.stationapi.api.client.event.gui.screen.EditWorldScreenEvent; import net.modificationstation.stationapi.api.client.gui.widget.ButtonWidgetDetachedContext; import net.modificationstation.stationapi.api.mod.entrypoint.Entrypoint; +import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; import net.modificationstation.stationapi.api.mod.entrypoint.EventBusPolicy; import net.modificationstation.stationapi.mixin.gui.client.ScreenAccessor; @@ -18,7 +18,7 @@ @EventListener(phase = StationAPI.INTERNAL_PHASE) public final class EditWorldScreenImpl { static { - Listener.registerLookup(MethodHandles.lookup()); + EntrypointManager.registerLookup(MethodHandles.lookup()); } @EventListener diff --git a/station-items-v0/src/main/java/net/modificationstation/stationapi/impl/client/gui/screen/container/CustomTooltipRendererImpl.java b/station-items-v0/src/main/java/net/modificationstation/stationapi/impl/client/gui/screen/container/CustomTooltipRendererImpl.java index a13663c3b..ae1a575f4 100644 --- a/station-items-v0/src/main/java/net/modificationstation/stationapi/impl/client/gui/screen/container/CustomTooltipRendererImpl.java +++ b/station-items-v0/src/main/java/net/modificationstation/stationapi/impl/client/gui/screen/container/CustomTooltipRendererImpl.java @@ -1,12 +1,12 @@ package net.modificationstation.stationapi.impl.client.gui.screen.container; import net.mine_diver.unsafeevents.listener.EventListener; -import net.mine_diver.unsafeevents.listener.Listener; import net.minecraft.client.gui.DrawContext; import net.modificationstation.stationapi.api.StationAPI; import net.modificationstation.stationapi.api.client.TooltipHelper; import net.modificationstation.stationapi.api.client.event.gui.screen.container.TooltipRenderEvent; import net.modificationstation.stationapi.api.mod.entrypoint.Entrypoint; +import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; import net.modificationstation.stationapi.api.mod.entrypoint.EventBusPolicy; import net.modificationstation.stationapi.mixin.item.client.DrawContextAccessor; import net.modificationstation.stationapi.mixin.item.client.HandledScreenAccessor; @@ -19,7 +19,7 @@ @EventListener(phase = StationAPI.INTERNAL_PHASE) public final class CustomTooltipRendererImpl { static { - Listener.registerLookup(MethodHandles.lookup()); + EntrypointManager.registerLookup(MethodHandles.lookup()); } private static final DrawContext CONTEXT = new DrawContext(); diff --git a/station-items-v0/src/main/java/net/modificationstation/stationapi/impl/client/render/item/CustomItemOverlayImpl.java b/station-items-v0/src/main/java/net/modificationstation/stationapi/impl/client/render/item/CustomItemOverlayImpl.java index c4cce8b15..4fdcbcfdb 100644 --- a/station-items-v0/src/main/java/net/modificationstation/stationapi/impl/client/render/item/CustomItemOverlayImpl.java +++ b/station-items-v0/src/main/java/net/modificationstation/stationapi/impl/client/render/item/CustomItemOverlayImpl.java @@ -1,11 +1,11 @@ package net.modificationstation.stationapi.impl.client.render.item; import net.mine_diver.unsafeevents.listener.EventListener; -import net.mine_diver.unsafeevents.listener.Listener; import net.modificationstation.stationapi.api.StationAPI; import net.modificationstation.stationapi.api.client.event.render.item.ItemOverlayRenderEvent; import net.modificationstation.stationapi.api.client.item.CustomItemOverlay; import net.modificationstation.stationapi.api.mod.entrypoint.Entrypoint; +import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; import net.modificationstation.stationapi.api.mod.entrypoint.EventBusPolicy; import java.lang.invoke.MethodHandles; @@ -14,7 +14,7 @@ @EventListener(phase = StationAPI.INTERNAL_PHASE) public final class CustomItemOverlayImpl { static { - Listener.registerLookup(MethodHandles.lookup()); + EntrypointManager.registerLookup(MethodHandles.lookup()); } @EventListener diff --git a/station-items-v0/src/main/java/net/modificationstation/stationapi/impl/dispenser/CustomDispenseBehaviorImpl.java b/station-items-v0/src/main/java/net/modificationstation/stationapi/impl/dispenser/CustomDispenseBehaviorImpl.java index 8d7fb3518..1aa32364f 100644 --- a/station-items-v0/src/main/java/net/modificationstation/stationapi/impl/dispenser/CustomDispenseBehaviorImpl.java +++ b/station-items-v0/src/main/java/net/modificationstation/stationapi/impl/dispenser/CustomDispenseBehaviorImpl.java @@ -1,11 +1,11 @@ package net.modificationstation.stationapi.impl.dispenser; import net.mine_diver.unsafeevents.listener.EventListener; -import net.mine_diver.unsafeevents.listener.Listener; import net.modificationstation.stationapi.api.StationAPI; import net.modificationstation.stationapi.api.dispenser.DispenseEvent; import net.modificationstation.stationapi.api.item.CustomDispenseBehavior; import net.modificationstation.stationapi.api.mod.entrypoint.Entrypoint; +import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; import net.modificationstation.stationapi.api.mod.entrypoint.EventBusPolicy; import java.lang.invoke.MethodHandles; @@ -14,7 +14,7 @@ @EventListener(phase = StationAPI.INTERNAL_PHASE) public class CustomDispenseBehaviorImpl { static { - Listener.registerLookup(MethodHandles.lookup()); + EntrypointManager.registerLookup(MethodHandles.lookup()); } @EventListener diff --git a/station-items-v0/src/main/java/net/modificationstation/stationapi/impl/entity/player/ItemCustomReachImpl.java b/station-items-v0/src/main/java/net/modificationstation/stationapi/impl/entity/player/ItemCustomReachImpl.java index 338162157..1654a89b1 100644 --- a/station-items-v0/src/main/java/net/modificationstation/stationapi/impl/entity/player/ItemCustomReachImpl.java +++ b/station-items-v0/src/main/java/net/modificationstation/stationapi/impl/entity/player/ItemCustomReachImpl.java @@ -1,13 +1,13 @@ package net.modificationstation.stationapi.impl.entity.player; import net.mine_diver.unsafeevents.listener.EventListener; -import net.mine_diver.unsafeevents.listener.Listener; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.modificationstation.stationapi.api.StationAPI; import net.modificationstation.stationapi.api.event.entity.player.PlayerEvent; import net.modificationstation.stationapi.api.item.CustomReachProvider; import net.modificationstation.stationapi.api.mod.entrypoint.Entrypoint; +import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; import net.modificationstation.stationapi.api.mod.entrypoint.EventBusPolicy; import java.lang.invoke.MethodHandles; @@ -16,7 +16,7 @@ @EventListener(phase = StationAPI.INTERNAL_PHASE) public final class ItemCustomReachImpl { static { - Listener.registerLookup(MethodHandles.lookup()); + EntrypointManager.registerLookup(MethodHandles.lookup()); } @EventListener diff --git a/station-localization-api-v0/src/main/java/net/modificationstation/stationapi/api/resource/language/LanguageManager.java b/station-localization-api-v0/src/main/java/net/modificationstation/stationapi/api/resource/language/LanguageManager.java index b93184427..4ba6e6f35 100644 --- a/station-localization-api-v0/src/main/java/net/modificationstation/stationapi/api/resource/language/LanguageManager.java +++ b/station-localization-api-v0/src/main/java/net/modificationstation/stationapi/api/resource/language/LanguageManager.java @@ -6,7 +6,6 @@ import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.mine_diver.unsafeevents.listener.EventListener; -import net.mine_diver.unsafeevents.listener.Listener; import net.minecraft.client.resource.language.TranslationStorage; import net.modificationstation.stationapi.api.StationAPI; import net.modificationstation.stationapi.api.client.event.resource.AssetsResourceReloaderRegisterEvent; @@ -14,13 +13,13 @@ import net.modificationstation.stationapi.api.event.resource.DataReloadEvent; import net.modificationstation.stationapi.api.event.resource.language.TranslationInvalidationEvent; import net.modificationstation.stationapi.api.mod.entrypoint.Entrypoint; +import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; import net.modificationstation.stationapi.api.mod.entrypoint.EventBusPolicy; import net.modificationstation.stationapi.api.resource.IdentifiableResourceReloadListener; import net.modificationstation.stationapi.api.resource.ResourceManager; import net.modificationstation.stationapi.api.resource.SinglePreparationResourceReloader; import net.modificationstation.stationapi.api.util.Identifier; import net.modificationstation.stationapi.api.util.Namespace; -import net.modificationstation.stationapi.api.util.Null; import net.modificationstation.stationapi.api.util.Util; import net.modificationstation.stationapi.api.util.profiler.DummyProfiler; import net.modificationstation.stationapi.api.util.profiler.Profiler; @@ -44,12 +43,12 @@ @EventListener(phase = StationAPI.INTERNAL_PHASE) public class LanguageManager extends SinglePreparationResourceReloader> implements IdentifiableResourceReloadListener { static { - Listener.registerLookup(MethodHandles.lookup()); + EntrypointManager.registerLookup(MethodHandles.lookup()); } public static final Identifier LANGUAGES = NAMESPACE.id("languages"); @Entrypoint.Instance - private static final LanguageManager INSTANCE = Null.get(); + private static LanguageManager instance; @NotNull private static Predicate pathPredicate = buildPathPredicate("en_US"); private static final Object2ReferenceMap LANG_PATHS = Util.make(new Object2ReferenceOpenHashMap<>(), paths -> { @@ -66,7 +65,7 @@ private static Predicate buildPathPredicate(String langDef) { public static void changeLanguage(String langDef) { pathPredicate = buildPathPredicate(langDef); - INSTANCE.reload(); + instance.reload(); } public static void addPath(String path) { @@ -90,8 +89,8 @@ private void loadOnServer(DataReloadEvent event) { } private void reload() { - INSTANCE.apply( - INSTANCE.prepare( + instance.apply( + instance.prepare( ReloadableAssetsManager.INSTANCE, DummyProfiler.INSTANCE ), diff --git a/station-networking-v0/src/main/java/net/modificationstation/stationapi/impl/network/packet/StationNetworkingInit.java b/station-networking-v0/src/main/java/net/modificationstation/stationapi/impl/network/packet/StationNetworkingInit.java index 7b6523ea4..03e18e87e 100644 --- a/station-networking-v0/src/main/java/net/modificationstation/stationapi/impl/network/packet/StationNetworkingInit.java +++ b/station-networking-v0/src/main/java/net/modificationstation/stationapi/impl/network/packet/StationNetworkingInit.java @@ -1,11 +1,11 @@ package net.modificationstation.stationapi.impl.network.packet; import net.mine_diver.unsafeevents.listener.EventListener; -import net.mine_diver.unsafeevents.listener.Listener; import net.modificationstation.stationapi.api.StationAPI; import net.modificationstation.stationapi.api.event.network.packet.PacketRegisterEvent; import net.modificationstation.stationapi.api.event.registry.MessageListenerRegistryEvent; import net.modificationstation.stationapi.api.mod.entrypoint.Entrypoint; +import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; import net.modificationstation.stationapi.api.mod.entrypoint.EventBusPolicy; import java.lang.invoke.MethodHandles; @@ -14,7 +14,7 @@ @EventListener(phase = StationAPI.INTERNAL_PHASE) public class StationNetworkingInit { static { - Listener.registerLookup(MethodHandles.lookup()); + EntrypointManager.registerLookup(MethodHandles.lookup()); } @EventListener diff --git a/station-recipes-v0/src/main/java/net/modificationstation/stationapi/impl/recipe/JsonRecipeParserInit.java b/station-recipes-v0/src/main/java/net/modificationstation/stationapi/impl/recipe/JsonRecipeParserInit.java index 997e47640..3fc042f2d 100644 --- a/station-recipes-v0/src/main/java/net/modificationstation/stationapi/impl/recipe/JsonRecipeParserInit.java +++ b/station-recipes-v0/src/main/java/net/modificationstation/stationapi/impl/recipe/JsonRecipeParserInit.java @@ -3,12 +3,12 @@ import com.google.gson.Gson; import com.google.gson.JsonElement; import net.mine_diver.unsafeevents.listener.EventListener; -import net.mine_diver.unsafeevents.listener.Listener; import net.modificationstation.stationapi.api.StationAPI; import net.modificationstation.stationapi.api.event.recipe.RecipeRegisterEvent; import net.modificationstation.stationapi.api.event.registry.JsonRecipeParserRegistryEvent; import net.modificationstation.stationapi.api.item.json.JsonItemKey; import net.modificationstation.stationapi.api.mod.entrypoint.Entrypoint; +import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; import net.modificationstation.stationapi.api.mod.entrypoint.EventBusPolicy; import net.modificationstation.stationapi.api.recipe.CraftingRegistry; import net.modificationstation.stationapi.api.recipe.SmeltingRegistry; @@ -32,7 +32,7 @@ @EventListener(phase = StationAPI.INTERNAL_PHASE) public class JsonRecipeParserInit { static { - Listener.registerLookup(MethodHandles.lookup()); + EntrypointManager.registerLookup(MethodHandles.lookup()); } @EventListener diff --git a/station-recipes-v0/src/main/java/net/modificationstation/stationapi/impl/recipe/JsonRecipesLoader.java b/station-recipes-v0/src/main/java/net/modificationstation/stationapi/impl/recipe/JsonRecipesLoader.java index 3930e4c64..28938eb73 100644 --- a/station-recipes-v0/src/main/java/net/modificationstation/stationapi/impl/recipe/JsonRecipesLoader.java +++ b/station-recipes-v0/src/main/java/net/modificationstation/stationapi/impl/recipe/JsonRecipesLoader.java @@ -2,10 +2,10 @@ import com.google.gson.Gson; import net.mine_diver.unsafeevents.listener.EventListener; -import net.mine_diver.unsafeevents.listener.Listener; import net.modificationstation.stationapi.api.StationAPI; import net.modificationstation.stationapi.api.event.mod.PreInitEvent; import net.modificationstation.stationapi.api.mod.entrypoint.Entrypoint; +import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; import net.modificationstation.stationapi.api.mod.entrypoint.EventBusPolicy; import net.modificationstation.stationapi.api.registry.JsonRecipesRegistry; import net.modificationstation.stationapi.api.registry.Registry; @@ -28,7 +28,7 @@ @EventListener(phase = StationAPI.INTERNAL_PHASE) public class JsonRecipesLoader { static { - Listener.registerLookup(MethodHandles.lookup()); + EntrypointManager.registerLookup(MethodHandles.lookup()); } @EventListener diff --git a/station-recipes-v0/src/main/java/net/modificationstation/stationapi/impl/recipe/json/JsonRecipeParserRegisterImpl.java b/station-recipes-v0/src/main/java/net/modificationstation/stationapi/impl/recipe/json/JsonRecipeParserRegisterImpl.java index 163e6472b..128d38f9b 100644 --- a/station-recipes-v0/src/main/java/net/modificationstation/stationapi/impl/recipe/json/JsonRecipeParserRegisterImpl.java +++ b/station-recipes-v0/src/main/java/net/modificationstation/stationapi/impl/recipe/json/JsonRecipeParserRegisterImpl.java @@ -1,17 +1,17 @@ package net.modificationstation.stationapi.impl.recipe.json; import net.mine_diver.unsafeevents.listener.EventListener; -import net.mine_diver.unsafeevents.listener.Listener; import net.modificationstation.stationapi.api.StationAPI; import net.modificationstation.stationapi.api.event.mod.InitEvent; import net.modificationstation.stationapi.api.event.registry.JsonRecipeParserRegistryEvent; +import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; import java.lang.invoke.MethodHandles; @EventListener(phase = StationAPI.INTERNAL_PHASE) public class JsonRecipeParserRegisterImpl { static { - Listener.registerLookup(MethodHandles.lookup()); + EntrypointManager.registerLookup(MethodHandles.lookup()); } @EventListener diff --git a/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/sync/trackers/BooleanArrayTracker.java b/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/sync/trackers/BooleanArrayTracker.java index 1cc272a5d..d68b3348a 100644 --- a/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/sync/trackers/BooleanArrayTracker.java +++ b/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/sync/trackers/BooleanArrayTracker.java @@ -6,6 +6,7 @@ import net.modificationstation.stationapi.api.StationAPI; import net.modificationstation.stationapi.api.event.registry.RegistryEntryAddedEvent; import net.modificationstation.stationapi.api.event.registry.RegistryIdRemapEvent; +import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; import net.modificationstation.stationapi.api.registry.ListenableRegistry; import net.modificationstation.stationapi.api.registry.Registry; import net.modificationstation.stationapi.api.util.math.MathHelper; @@ -18,7 +19,7 @@ @EventListener(phase = StationAPI.INTERNAL_PHASE) public class BooleanArrayTracker { static { - Listener.registerLookup(MethodHandles.lookup()); + EntrypointManager.registerLookup(MethodHandles.lookup()); } private final Supplier arrayGetter; diff --git a/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/sync/trackers/Int2ObjectMapTracker.java b/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/sync/trackers/Int2ObjectMapTracker.java index ea637bf0d..4e0f4c94a 100644 --- a/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/sync/trackers/Int2ObjectMapTracker.java +++ b/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/sync/trackers/Int2ObjectMapTracker.java @@ -10,6 +10,7 @@ import net.mine_diver.unsafeevents.listener.Listener; import net.modificationstation.stationapi.api.event.registry.RegistryEntryAddedEvent; import net.modificationstation.stationapi.api.event.registry.RegistryIdRemapEvent; +import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; import net.modificationstation.stationapi.api.registry.ListenableRegistry; import net.modificationstation.stationapi.api.registry.Registry; import net.modificationstation.stationapi.api.util.Identifier; @@ -22,7 +23,7 @@ public class Int2ObjectMapTracker { static { - Listener.registerLookup(MethodHandles.lookup()); + EntrypointManager.registerLookup(MethodHandles.lookup()); } private final String name; diff --git a/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/sync/trackers/IntArrayTracker.java b/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/sync/trackers/IntArrayTracker.java index c26c2ed9e..b63a17c6b 100644 --- a/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/sync/trackers/IntArrayTracker.java +++ b/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/sync/trackers/IntArrayTracker.java @@ -6,6 +6,7 @@ import net.modificationstation.stationapi.api.StationAPI; import net.modificationstation.stationapi.api.event.registry.RegistryEntryAddedEvent; import net.modificationstation.stationapi.api.event.registry.RegistryIdRemapEvent; +import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; import net.modificationstation.stationapi.api.registry.ListenableRegistry; import net.modificationstation.stationapi.api.registry.Registry; import net.modificationstation.stationapi.api.util.math.MathHelper; @@ -18,7 +19,7 @@ @EventListener(phase = StationAPI.INTERNAL_PHASE) public class IntArrayTracker { static { - Listener.registerLookup(MethodHandles.lookup()); + EntrypointManager.registerLookup(MethodHandles.lookup()); } private final Supplier arrayGetter; diff --git a/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/sync/trackers/ObjectArrayTracker.java b/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/sync/trackers/ObjectArrayTracker.java index facd5366e..c18059018 100644 --- a/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/sync/trackers/ObjectArrayTracker.java +++ b/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/sync/trackers/ObjectArrayTracker.java @@ -6,6 +6,7 @@ import net.modificationstation.stationapi.api.StationAPI; import net.modificationstation.stationapi.api.event.registry.RegistryEntryAddedEvent; import net.modificationstation.stationapi.api.event.registry.RegistryIdRemapEvent; +import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; import net.modificationstation.stationapi.api.registry.ListenableRegistry; import net.modificationstation.stationapi.api.registry.Registry; import net.modificationstation.stationapi.api.registry.RemappableRawIdHolder; @@ -19,7 +20,7 @@ @EventListener(phase = StationAPI.INTERNAL_PHASE) public class ObjectArrayTracker { static { - Listener.registerLookup(MethodHandles.lookup()); + EntrypointManager.registerLookup(MethodHandles.lookup()); } private final Supplier arrayGetter; diff --git a/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/sync/trackers/RemappableEntryArrayTracker.java b/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/sync/trackers/RemappableEntryArrayTracker.java index 6b1289663..94ff9e198 100644 --- a/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/sync/trackers/RemappableEntryArrayTracker.java +++ b/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/sync/trackers/RemappableEntryArrayTracker.java @@ -6,6 +6,7 @@ import net.modificationstation.stationapi.api.StationAPI; import net.modificationstation.stationapi.api.event.registry.RegistryEntryAddedEvent; import net.modificationstation.stationapi.api.event.registry.RegistryIdRemapEvent; +import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; import net.modificationstation.stationapi.api.registry.ListenableRegistry; import net.modificationstation.stationapi.api.registry.Registry; import net.modificationstation.stationapi.api.registry.RemappableRawIdHolder; @@ -18,7 +19,7 @@ @EventListener(phase = StationAPI.INTERNAL_PHASE) public class RemappableEntryArrayTracker { static { - Listener.registerLookup(MethodHandles.lookup()); + EntrypointManager.registerLookup(MethodHandles.lookup()); } private final Supplier arrayGetter; diff --git a/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/sync/trackers/StateIdTracker.java b/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/sync/trackers/StateIdTracker.java index 51539ac2e..c0caaae96 100644 --- a/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/sync/trackers/StateIdTracker.java +++ b/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/api/registry/sync/trackers/StateIdTracker.java @@ -7,6 +7,7 @@ import net.modificationstation.stationapi.api.StationAPI; import net.modificationstation.stationapi.api.event.registry.RegistryEntryAddedEvent; import net.modificationstation.stationapi.api.event.registry.RegistryIdRemapEvent; +import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; import net.modificationstation.stationapi.api.registry.ListenableRegistry; import net.modificationstation.stationapi.api.registry.Registry; import net.modificationstation.stationapi.api.util.collection.IdList; @@ -20,7 +21,7 @@ @EventListener(phase = StationAPI.INTERNAL_PHASE) public final class StateIdTracker { static { - Listener.registerLookup(MethodHandles.lookup()); + EntrypointManager.registerLookup(MethodHandles.lookup()); } private final Registry registry; diff --git a/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/impl/registry/TagReloaderImpl.java b/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/impl/registry/TagReloaderImpl.java index 1fd092b64..328818fc5 100644 --- a/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/impl/registry/TagReloaderImpl.java +++ b/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/impl/registry/TagReloaderImpl.java @@ -1,10 +1,10 @@ package net.modificationstation.stationapi.impl.registry; import net.mine_diver.unsafeevents.listener.EventListener; -import net.mine_diver.unsafeevents.listener.Listener; import net.modificationstation.stationapi.api.StationAPI; import net.modificationstation.stationapi.api.event.resource.DataResourceReloaderRegisterEvent; import net.modificationstation.stationapi.api.mod.entrypoint.Entrypoint; +import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; import net.modificationstation.stationapi.api.mod.entrypoint.EventBusPolicy; import net.modificationstation.stationapi.api.registry.ServerDynamicRegistryType; import net.modificationstation.stationapi.api.tag.TagManagerLoader; @@ -15,7 +15,7 @@ @EventListener(phase = StationAPI.INTERNAL_PHASE) public final class TagReloaderImpl { static { - Listener.registerLookup(MethodHandles.lookup()); + EntrypointManager.registerLookup(MethodHandles.lookup()); } @EventListener diff --git a/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/impl/registry/WorldRegistryRemapper.java b/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/impl/registry/WorldRegistryRemapper.java index 24412b64f..98db4047a 100644 --- a/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/impl/registry/WorldRegistryRemapper.java +++ b/station-registry-api-v0/src/main/java/net/modificationstation/stationapi/impl/registry/WorldRegistryRemapper.java @@ -1,11 +1,11 @@ package net.modificationstation.stationapi.impl.registry; import net.mine_diver.unsafeevents.listener.EventListener; -import net.mine_diver.unsafeevents.listener.Listener; import net.minecraft.nbt.NbtCompound; import net.modificationstation.stationapi.api.StationAPI; import net.modificationstation.stationapi.api.event.world.WorldPropertiesEvent; import net.modificationstation.stationapi.api.mod.entrypoint.Entrypoint; +import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; import net.modificationstation.stationapi.api.mod.entrypoint.EventBusPolicy; import net.modificationstation.stationapi.api.registry.legacy.WorldLegacyRegistry; @@ -18,7 +18,7 @@ @EventListener(phase = StationAPI.INTERNAL_PHASE) public class WorldRegistryRemapper { static { - Listener.registerLookup(MethodHandles.lookup()); + EntrypointManager.registerLookup(MethodHandles.lookup()); } @EventListener diff --git a/station-registry-sync-v0/src/main/java/net/modificationstation/stationapi/impl/client/registry/ClientRegistryRestorer.java b/station-registry-sync-v0/src/main/java/net/modificationstation/stationapi/impl/client/registry/ClientRegistryRestorer.java index c472262e0..495dced59 100644 --- a/station-registry-sync-v0/src/main/java/net/modificationstation/stationapi/impl/client/registry/ClientRegistryRestorer.java +++ b/station-registry-sync-v0/src/main/java/net/modificationstation/stationapi/impl/client/registry/ClientRegistryRestorer.java @@ -3,10 +3,10 @@ import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.mine_diver.unsafeevents.listener.EventListener; -import net.mine_diver.unsafeevents.listener.Listener; import net.modificationstation.stationapi.api.StationAPI; import net.modificationstation.stationapi.api.client.event.network.MultiplayerLogoutEvent; import net.modificationstation.stationapi.api.mod.entrypoint.Entrypoint; +import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; import net.modificationstation.stationapi.api.mod.entrypoint.EventBusPolicy; import net.modificationstation.stationapi.api.registry.RemapException; import net.modificationstation.stationapi.impl.registry.sync.RegistrySyncManager; @@ -18,7 +18,7 @@ @EventListener(phase = StationAPI.INTERNAL_PHASE) public final class ClientRegistryRestorer { static { - Listener.registerLookup(MethodHandles.lookup()); + EntrypointManager.registerLookup(MethodHandles.lookup()); } @Environment(EnvType.CLIENT) diff --git a/station-registry-sync-v0/src/main/java/net/modificationstation/stationapi/impl/client/registry/ClientServerRegistryRemapper.java b/station-registry-sync-v0/src/main/java/net/modificationstation/stationapi/impl/client/registry/ClientServerRegistryRemapper.java index 52fac5baa..5424c061a 100644 --- a/station-registry-sync-v0/src/main/java/net/modificationstation/stationapi/impl/client/registry/ClientServerRegistryRemapper.java +++ b/station-registry-sync-v0/src/main/java/net/modificationstation/stationapi/impl/client/registry/ClientServerRegistryRemapper.java @@ -1,12 +1,12 @@ package net.modificationstation.stationapi.impl.client.registry; import net.mine_diver.unsafeevents.listener.EventListener; -import net.mine_diver.unsafeevents.listener.Listener; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.nbt.NbtIo; import net.modificationstation.stationapi.api.StationAPI; import net.modificationstation.stationapi.api.event.registry.MessageListenerRegistryEvent; import net.modificationstation.stationapi.api.mod.entrypoint.Entrypoint; +import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; import net.modificationstation.stationapi.api.mod.entrypoint.EventBusPolicy; import net.modificationstation.stationapi.api.network.packet.MessagePacket; import net.modificationstation.stationapi.api.registry.Registry; @@ -22,7 +22,7 @@ @EventListener(phase = StationAPI.INTERNAL_PHASE) public class ClientServerRegistryRemapper { static { - Listener.registerLookup(MethodHandles.lookup()); + EntrypointManager.registerLookup(MethodHandles.lookup()); } @EventListener diff --git a/station-registry-sync-v0/src/main/java/net/modificationstation/stationapi/impl/network/RegistryNetworkingInit.java b/station-registry-sync-v0/src/main/java/net/modificationstation/stationapi/impl/network/RegistryNetworkingInit.java index 9d9d89c7f..b8dfc071c 100644 --- a/station-registry-sync-v0/src/main/java/net/modificationstation/stationapi/impl/network/RegistryNetworkingInit.java +++ b/station-registry-sync-v0/src/main/java/net/modificationstation/stationapi/impl/network/RegistryNetworkingInit.java @@ -1,10 +1,10 @@ package net.modificationstation.stationapi.impl.network; import net.mine_diver.unsafeevents.listener.EventListener; -import net.mine_diver.unsafeevents.listener.Listener; import net.modificationstation.stationapi.api.StationAPI; import net.modificationstation.stationapi.api.event.network.packet.PacketRegisterEvent; import net.modificationstation.stationapi.api.mod.entrypoint.Entrypoint; +import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; import net.modificationstation.stationapi.api.mod.entrypoint.EventBusPolicy; import net.modificationstation.stationapi.api.registry.PacketTypeRegistry; import net.modificationstation.stationapi.api.registry.Registry; @@ -19,7 +19,7 @@ @EventListener(phase = StationAPI.INTERNAL_PHASE, priority = HIGH) public final class RegistryNetworkingInit { static { - Listener.registerLookup(MethodHandles.lookup()); + EntrypointManager.registerLookup(MethodHandles.lookup()); } @EventListener diff --git a/station-registry-sync-v0/src/main/java/net/modificationstation/stationapi/impl/server/registry/ServerRegistrySender.java b/station-registry-sync-v0/src/main/java/net/modificationstation/stationapi/impl/server/registry/ServerRegistrySender.java index 1ed58a065..67eb436c4 100644 --- a/station-registry-sync-v0/src/main/java/net/modificationstation/stationapi/impl/server/registry/ServerRegistrySender.java +++ b/station-registry-sync-v0/src/main/java/net/modificationstation/stationapi/impl/server/registry/ServerRegistrySender.java @@ -1,11 +1,11 @@ package net.modificationstation.stationapi.impl.server.registry; import net.mine_diver.unsafeevents.listener.EventListener; -import net.mine_diver.unsafeevents.listener.Listener; import net.minecraft.nbt.NbtCompound; import net.minecraft.nbt.NbtIo; import net.modificationstation.stationapi.api.StationAPI; import net.modificationstation.stationapi.api.mod.entrypoint.Entrypoint; +import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; import net.modificationstation.stationapi.api.mod.entrypoint.EventBusPolicy; import net.modificationstation.stationapi.api.network.ModdedPacketHandler; import net.modificationstation.stationapi.api.network.packet.MessagePacket; @@ -24,7 +24,7 @@ @EventListener(phase = StationAPI.INTERNAL_PHASE) public class ServerRegistrySender { static { - Listener.registerLookup(MethodHandles.lookup()); + EntrypointManager.registerLookup(MethodHandles.lookup()); } @EventListener diff --git a/station-registry-sync-v0/src/main/java/net/modificationstation/stationapi/impl/server/registry/ServerRegistrySynchronizer.java b/station-registry-sync-v0/src/main/java/net/modificationstation/stationapi/impl/server/registry/ServerRegistrySynchronizer.java index 0e17def8f..dd9635fd3 100644 --- a/station-registry-sync-v0/src/main/java/net/modificationstation/stationapi/impl/server/registry/ServerRegistrySynchronizer.java +++ b/station-registry-sync-v0/src/main/java/net/modificationstation/stationapi/impl/server/registry/ServerRegistrySynchronizer.java @@ -1,9 +1,9 @@ package net.modificationstation.stationapi.impl.server.registry; import net.mine_diver.unsafeevents.listener.EventListener; -import net.mine_diver.unsafeevents.listener.Listener; import net.modificationstation.stationapi.api.StationAPI; import net.modificationstation.stationapi.api.mod.entrypoint.Entrypoint; +import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; import net.modificationstation.stationapi.api.mod.entrypoint.EventBusPolicy; import net.modificationstation.stationapi.api.server.event.network.PlayerPacketHandlerSetEvent; import net.modificationstation.stationapi.impl.registry.sync.RegistrySyncManager; @@ -14,7 +14,7 @@ @EventListener(phase = StationAPI.INTERNAL_PHASE) public class ServerRegistrySynchronizer { static { - Listener.registerLookup(MethodHandles.lookup()); + EntrypointManager.registerLookup(MethodHandles.lookup()); } @EventListener diff --git a/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/impl/client/texture/StationRenderImpl.java b/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/impl/client/texture/StationRenderImpl.java index 10dc3ccf2..0d98ffa6d 100644 --- a/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/impl/client/texture/StationRenderImpl.java +++ b/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/impl/client/texture/StationRenderImpl.java @@ -3,7 +3,6 @@ import com.mojang.datafixers.util.Pair; import net.fabricmc.loader.api.FabricLoader; import net.mine_diver.unsafeevents.listener.EventListener; -import net.mine_diver.unsafeevents.listener.Listener; import net.minecraft.class_285; import net.minecraft.client.Minecraft; import net.modificationstation.stationapi.api.StationAPI; @@ -21,11 +20,11 @@ import net.modificationstation.stationapi.api.client.texture.atlas.Atlases; import net.modificationstation.stationapi.api.client.texture.atlas.ExpandableAtlas; import net.modificationstation.stationapi.api.mod.entrypoint.Entrypoint; +import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; import net.modificationstation.stationapi.api.mod.entrypoint.EventBusPolicy; import net.modificationstation.stationapi.api.resource.*; import net.modificationstation.stationapi.api.util.Identifier; import net.modificationstation.stationapi.api.util.Namespace; -import net.modificationstation.stationapi.api.util.Null; import net.modificationstation.stationapi.api.util.profiler.Profiler; import org.apache.logging.log4j.Logger; @@ -41,14 +40,12 @@ @EventListener(phase = StationAPI.INTERNAL_PHASE) public class StationRenderImpl { static { - Listener.registerLookup(MethodHandles.lookup()); + EntrypointManager.registerLookup(MethodHandles.lookup()); } - @Entrypoint.Namespace - public static final Namespace NAMESPACE = Null.get(); + public static final Namespace NAMESPACE = Namespace.resolve(); - @Entrypoint.Logger("StationRenderer|API") - public static final Logger LOGGER = Null.get(); + public static final Logger LOGGER = NAMESPACE.getLogger("StationRenderer|API"); public static ExpandableAtlas getTerrain() { return TERRAIN; diff --git a/station-renderer-arsenic/src/main/java/net/modificationstation/stationapi/impl/client/arsenic/Arsenic.java b/station-renderer-arsenic/src/main/java/net/modificationstation/stationapi/impl/client/arsenic/Arsenic.java index 1d1d67ed3..fd42ada67 100644 --- a/station-renderer-arsenic/src/main/java/net/modificationstation/stationapi/impl/client/arsenic/Arsenic.java +++ b/station-renderer-arsenic/src/main/java/net/modificationstation/stationapi/impl/client/arsenic/Arsenic.java @@ -12,8 +12,9 @@ import net.modificationstation.stationapi.api.client.texture.atlas.ExpandableAtlas; import net.modificationstation.stationapi.api.event.mod.InitEvent; import net.modificationstation.stationapi.api.mod.entrypoint.Entrypoint; +import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; import net.modificationstation.stationapi.api.mod.entrypoint.EventBusPolicy; -import net.modificationstation.stationapi.api.util.Null; +import net.modificationstation.stationapi.api.util.Namespace; import net.modificationstation.stationapi.impl.client.arsenic.renderer.ArsenicRenderer; import net.modificationstation.stationapi.impl.client.arsenic.renderer.render.binder.*; import net.modificationstation.stationapi.mixin.render.client.TextureManagerAccessor; @@ -30,11 +31,10 @@ @EventListener(phase = StationAPI.INTERNAL_PHASE) public class Arsenic { static { - Listener.registerLookup(MethodHandles.lookup()); + EntrypointManager.registerLookup(MethodHandles.lookup()); } - @Entrypoint.Logger("Arsenic") - public static final Logger LOGGER = Null.get(); + public static final Logger LOGGER = Namespace.resolve().getLogger("Arsenic"); @EventListener private static void init(InitEvent event) { diff --git a/station-resource-loader-v0/src/main/java/net/modificationstation/stationapi/impl/client/resource/AssetsReloaderImpl.java b/station-resource-loader-v0/src/main/java/net/modificationstation/stationapi/impl/client/resource/AssetsReloaderImpl.java index 692c000c6..650341258 100644 --- a/station-resource-loader-v0/src/main/java/net/modificationstation/stationapi/impl/client/resource/AssetsReloaderImpl.java +++ b/station-resource-loader-v0/src/main/java/net/modificationstation/stationapi/impl/client/resource/AssetsReloaderImpl.java @@ -1,13 +1,13 @@ package net.modificationstation.stationapi.impl.client.resource; import net.mine_diver.unsafeevents.listener.EventListener; -import net.mine_diver.unsafeevents.listener.Listener; import net.modificationstation.stationapi.api.StationAPI; import net.modificationstation.stationapi.api.client.event.resource.AssetsReloadEvent; import net.modificationstation.stationapi.api.client.event.resource.TexturePackLoadedEvent; import net.modificationstation.stationapi.api.client.resource.ReloadScreenManager; import net.modificationstation.stationapi.api.client.resource.ReloadableAssetsManager; import net.modificationstation.stationapi.api.mod.entrypoint.Entrypoint; +import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; import net.modificationstation.stationapi.api.mod.entrypoint.EventBusPolicy; import net.modificationstation.stationapi.api.resource.CompositeResourceReload; import net.modificationstation.stationapi.api.util.Unit; @@ -27,7 +27,7 @@ @EventListener(phase = StationAPI.INTERNAL_PHASE) public final class AssetsReloaderImpl { static { - Listener.registerLookup(MethodHandles.lookup()); + EntrypointManager.registerLookup(MethodHandles.lookup()); } public static final ResourcePackManager RESOURCE_PACK_MANAGER = new ResourcePackManager( diff --git a/station-resource-loader-v0/src/main/java/net/modificationstation/stationapi/impl/resource/DataReloaderImpl.java b/station-resource-loader-v0/src/main/java/net/modificationstation/stationapi/impl/resource/DataReloaderImpl.java index 471cbab3f..e83005f9c 100644 --- a/station-resource-loader-v0/src/main/java/net/modificationstation/stationapi/impl/resource/DataReloaderImpl.java +++ b/station-resource-loader-v0/src/main/java/net/modificationstation/stationapi/impl/resource/DataReloaderImpl.java @@ -3,11 +3,11 @@ import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.mine_diver.unsafeevents.listener.EventListener; -import net.mine_diver.unsafeevents.listener.Listener; import net.modificationstation.stationapi.api.StationAPI; import net.modificationstation.stationapi.api.client.resource.ReloadScreenManager; import net.modificationstation.stationapi.api.event.resource.DataReloadEvent; import net.modificationstation.stationapi.api.mod.entrypoint.Entrypoint; +import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; import net.modificationstation.stationapi.api.mod.entrypoint.EventBusPolicy; import net.modificationstation.stationapi.api.resource.CompositeResourceReload; import net.modificationstation.stationapi.api.resource.DataManager; @@ -30,7 +30,7 @@ @EventListener(phase = StationAPI.INTERNAL_PHASE) public class DataReloaderImpl { static { - Listener.registerLookup(MethodHandles.lookup()); + EntrypointManager.registerLookup(MethodHandles.lookup()); } private static final ResourcePackManager DATA_PACK_MANAGER = new ResourcePackManager(consumer -> consumer.accept(ResourcePackProfile.create("vanilla", "fixText", true, name -> new DefaultResourcePack(), ResourceType.SERVER_DATA, ResourcePackProfile.InsertionPosition.BOTTOM, ResourcePackSource.BUILTIN)), new ModResourcePackCreator(ResourceType.SERVER_DATA)); diff --git a/station-tools-api-v1/src/main/java/net/modificationstation/stationapi/impl/item/HijackShearsImplV1.java b/station-tools-api-v1/src/main/java/net/modificationstation/stationapi/impl/item/HijackShearsImplV1.java index f44f5f9e8..42982cdad 100644 --- a/station-tools-api-v1/src/main/java/net/modificationstation/stationapi/impl/item/HijackShearsImplV1.java +++ b/station-tools-api-v1/src/main/java/net/modificationstation/stationapi/impl/item/HijackShearsImplV1.java @@ -1,9 +1,9 @@ package net.modificationstation.stationapi.impl.item; import net.mine_diver.unsafeevents.listener.EventListener; -import net.mine_diver.unsafeevents.listener.Listener; import net.modificationstation.stationapi.api.StationAPI; import net.modificationstation.stationapi.api.item.tool.StationTool; +import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; import net.modificationstation.stationapi.api.util.Identifier; import java.lang.invoke.MethodHandles; @@ -11,7 +11,7 @@ @EventListener(phase = StationAPI.INTERNAL_PHASE) public class HijackShearsImplV1 { static { - Listener.registerLookup(MethodHandles.lookup()); + EntrypointManager.registerLookup(MethodHandles.lookup()); } //TODO: Make this match anything that has shear tool properties. Not sure how to go around this at the moment. diff --git a/station-vanilla-checker-v0/src/main/java/net/modificationstation/stationapi/impl/client/network/ClientVanillaChecker.java b/station-vanilla-checker-v0/src/main/java/net/modificationstation/stationapi/impl/client/network/ClientVanillaChecker.java index 1db74881f..7dacb49ae 100644 --- a/station-vanilla-checker-v0/src/main/java/net/modificationstation/stationapi/impl/client/network/ClientVanillaChecker.java +++ b/station-vanilla-checker-v0/src/main/java/net/modificationstation/stationapi/impl/client/network/ClientVanillaChecker.java @@ -3,10 +3,10 @@ import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.ModContainer; import net.mine_diver.unsafeevents.listener.EventListener; -import net.mine_diver.unsafeevents.listener.Listener; import net.modificationstation.stationapi.api.StationAPI; import net.modificationstation.stationapi.api.client.event.network.ServerLoginSuccessEvent; import net.modificationstation.stationapi.api.mod.entrypoint.Entrypoint; +import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; import net.modificationstation.stationapi.api.mod.entrypoint.EventBusPolicy; import net.modificationstation.stationapi.api.network.packet.MessagePacket; import net.modificationstation.stationapi.impl.network.ModdedPacketHandlerSetter; @@ -21,7 +21,7 @@ @EventListener(phase = StationAPI.INTERNAL_PHASE) public class ClientVanillaChecker { static { - Listener.registerLookup(MethodHandles.lookup()); + EntrypointManager.registerLookup(MethodHandles.lookup()); } @EventListener diff --git a/station-vanilla-checker-v0/src/main/java/net/modificationstation/stationapi/impl/network/VanillaChecker.java b/station-vanilla-checker-v0/src/main/java/net/modificationstation/stationapi/impl/network/VanillaChecker.java index c3a189bc1..eb295d441 100644 --- a/station-vanilla-checker-v0/src/main/java/net/modificationstation/stationapi/impl/network/VanillaChecker.java +++ b/station-vanilla-checker-v0/src/main/java/net/modificationstation/stationapi/impl/network/VanillaChecker.java @@ -5,10 +5,10 @@ import net.fabricmc.loader.api.ModContainer; import net.fabricmc.loader.api.metadata.ModMetadata; import net.mine_diver.unsafeevents.listener.EventListener; -import net.mine_diver.unsafeevents.listener.Listener; import net.modificationstation.stationapi.api.StationAPI; import net.modificationstation.stationapi.api.event.mod.PreInitEvent; import net.modificationstation.stationapi.api.mod.entrypoint.Entrypoint; +import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; import net.modificationstation.stationapi.api.mod.entrypoint.EventBusPolicy; import java.lang.invoke.MethodHandles; @@ -22,7 +22,7 @@ @EventListener(phase = StationAPI.INTERNAL_PHASE) public class VanillaChecker { static { - Listener.registerLookup(MethodHandles.lookup()); + EntrypointManager.registerLookup(MethodHandles.lookup()); } public static final long MASK = Hashing.sipHash24().hashUnencodedChars(NAMESPACE.toString()).asLong(); diff --git a/station-vanilla-checker-v0/src/main/java/net/modificationstation/stationapi/impl/server/network/ServerVanillaChecker.java b/station-vanilla-checker-v0/src/main/java/net/modificationstation/stationapi/impl/server/network/ServerVanillaChecker.java index 934ebd31d..5fc46b92b 100644 --- a/station-vanilla-checker-v0/src/main/java/net/modificationstation/stationapi/impl/server/network/ServerVanillaChecker.java +++ b/station-vanilla-checker-v0/src/main/java/net/modificationstation/stationapi/impl/server/network/ServerVanillaChecker.java @@ -4,12 +4,12 @@ import net.fabricmc.loader.api.ModContainer; import net.fabricmc.loader.api.metadata.ModMetadata; import net.mine_diver.unsafeevents.listener.EventListener; -import net.mine_diver.unsafeevents.listener.Listener; import net.minecraft.client.resource.language.I18n; import net.minecraft.entity.player.ServerPlayerEntity; import net.modificationstation.stationapi.api.StationAPI; import net.modificationstation.stationapi.api.event.registry.MessageListenerRegistryEvent; import net.modificationstation.stationapi.api.mod.entrypoint.Entrypoint; +import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; import net.modificationstation.stationapi.api.mod.entrypoint.EventBusPolicy; import net.modificationstation.stationapi.api.registry.Registry; import net.modificationstation.stationapi.api.server.event.network.PlayerAttemptLoginEvent; @@ -29,7 +29,7 @@ @EventListener(phase = StationAPI.INTERNAL_PHASE) public class ServerVanillaChecker { static { - Listener.registerLookup(MethodHandles.lookup()); + EntrypointManager.registerLookup(MethodHandles.lookup()); } @EventListener diff --git a/station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/block/VanillaBlockFixImpl.java b/station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/block/VanillaBlockFixImpl.java index 3ba3c55d6..6817729b6 100644 --- a/station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/block/VanillaBlockFixImpl.java +++ b/station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/block/VanillaBlockFixImpl.java @@ -4,7 +4,6 @@ import it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet; import it.unimi.dsi.fastutil.objects.ReferenceSet; import net.mine_diver.unsafeevents.listener.EventListener; -import net.mine_diver.unsafeevents.listener.Listener; import net.minecraft.block.Block; import net.minecraft.item.BlockItem; import net.minecraft.item.Item; @@ -13,6 +12,7 @@ import net.modificationstation.stationapi.api.event.registry.BlockItemRegistryEvent; import net.modificationstation.stationapi.api.event.registry.BlockRegistryEvent; import net.modificationstation.stationapi.api.mod.entrypoint.Entrypoint; +import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; import net.modificationstation.stationapi.api.mod.entrypoint.EventBusPolicy; import net.modificationstation.stationapi.api.registry.BlockRegistry; import net.modificationstation.stationapi.api.registry.ItemRegistry; @@ -33,7 +33,7 @@ @EventListener(phase = StationAPI.INTERNAL_PHASE) public final class VanillaBlockFixImpl { static { - Listener.registerLookup(MethodHandles.lookup()); + EntrypointManager.registerLookup(MethodHandles.lookup()); } public static final Supplier> COLLISION_BLOCKS = Suppliers.memoize(() -> Util.make(new ReferenceOpenHashSet<>(), s -> { diff --git a/station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/client/color/block/VanillaBlockColorProviders.java b/station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/client/color/block/VanillaBlockColorProviders.java index 4774ada48..0bb015f3c 100644 --- a/station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/client/color/block/VanillaBlockColorProviders.java +++ b/station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/client/color/block/VanillaBlockColorProviders.java @@ -1,13 +1,13 @@ package net.modificationstation.stationapi.impl.vanillafix.client.color.block; import net.mine_diver.unsafeevents.listener.EventListener; -import net.mine_diver.unsafeevents.listener.Listener; import net.minecraft.block.Block; import net.minecraft.class_287; import net.modificationstation.stationapi.api.StationAPI; import net.modificationstation.stationapi.api.client.color.world.BiomeColors; import net.modificationstation.stationapi.api.client.event.color.block.BlockColorsRegisterEvent; import net.modificationstation.stationapi.api.mod.entrypoint.Entrypoint; +import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; import net.modificationstation.stationapi.api.mod.entrypoint.EventBusPolicy; import java.lang.invoke.MethodHandles; @@ -16,7 +16,7 @@ @EventListener(phase = StationAPI.INTERNAL_PHASE) public final class VanillaBlockColorProviders { static { - Listener.registerLookup(MethodHandles.lookup()); + EntrypointManager.registerLookup(MethodHandles.lookup()); } @EventListener diff --git a/station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/client/gui/screen/EditWorldScreenImpl.java b/station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/client/gui/screen/EditWorldScreenImpl.java index b42642bc4..fe79b1073 100644 --- a/station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/client/gui/screen/EditWorldScreenImpl.java +++ b/station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/client/gui/screen/EditWorldScreenImpl.java @@ -4,7 +4,6 @@ import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.mine_diver.unsafeevents.listener.EventListener; -import net.mine_diver.unsafeevents.listener.Listener; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.widget.ButtonWidget; import net.minecraft.client.resource.language.I18n; @@ -14,6 +13,7 @@ import net.modificationstation.stationapi.api.client.gui.widget.ButtonWidgetDetachedContext; import net.modificationstation.stationapi.api.datafixer.DataFixers; import net.modificationstation.stationapi.api.mod.entrypoint.Entrypoint; +import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; import net.modificationstation.stationapi.api.mod.entrypoint.EventBusPolicy; import net.modificationstation.stationapi.api.nbt.NbtHelper; import net.modificationstation.stationapi.api.nbt.NbtOps; @@ -31,7 +31,7 @@ @EventListener(phase = StationAPI.INTERNAL_PHASE) public final class EditWorldScreenImpl { static { - Listener.registerLookup(MethodHandles.lookup()); + EntrypointManager.registerLookup(MethodHandles.lookup()); } private static final String diff --git a/station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/datafixer/VanillaDataFixerImpl.java b/station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/datafixer/VanillaDataFixerImpl.java index fe79277e6..647482e83 100644 --- a/station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/datafixer/VanillaDataFixerImpl.java +++ b/station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/datafixer/VanillaDataFixerImpl.java @@ -5,12 +5,12 @@ import com.mojang.datafixers.DataFixerBuilder; import com.mojang.datafixers.schemas.Schema; import net.mine_diver.unsafeevents.listener.EventListener; -import net.mine_diver.unsafeevents.listener.Listener; import net.modificationstation.stationapi.api.StationAPI; import net.modificationstation.stationapi.api.datafixer.DataFixers; import net.modificationstation.stationapi.api.datafixer.TypeReferences; import net.modificationstation.stationapi.api.event.datafixer.DataFixerRegisterEvent; import net.modificationstation.stationapi.api.mod.entrypoint.Entrypoint; +import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; import net.modificationstation.stationapi.api.mod.entrypoint.EventBusPolicy; import net.modificationstation.stationapi.api.util.Util; import net.modificationstation.stationapi.api.vanillafix.datadamager.damage.StationFlatteningToMcRegionChunkDamage; @@ -34,7 +34,7 @@ @EventListener(phase = StationAPI.INTERNAL_PHASE) public final class VanillaDataFixerImpl { static { - Listener.registerLookup(MethodHandles.lookup()); + EntrypointManager.registerLookup(MethodHandles.lookup()); } public static final String STATION_ID = NAMESPACE.id("id").toString(); diff --git a/station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/dimension/VanillaDimensionFixImpl.java b/station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/dimension/VanillaDimensionFixImpl.java index 891b81175..1859aaded 100644 --- a/station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/dimension/VanillaDimensionFixImpl.java +++ b/station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/dimension/VanillaDimensionFixImpl.java @@ -1,7 +1,6 @@ package net.modificationstation.stationapi.impl.vanillafix.dimension; import net.mine_diver.unsafeevents.listener.EventListener; -import net.mine_diver.unsafeevents.listener.Listener; import net.minecraft.world.dimension.Dimension; import net.minecraft.world.dimension.NetherDimension; import net.minecraft.world.dimension.OverworldDimension; @@ -9,6 +8,7 @@ import net.modificationstation.stationapi.api.StationAPI; import net.modificationstation.stationapi.api.event.registry.DimensionRegistryEvent; import net.modificationstation.stationapi.api.mod.entrypoint.Entrypoint; +import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; import net.modificationstation.stationapi.api.mod.entrypoint.EventBusPolicy; import net.modificationstation.stationapi.api.registry.DimensionContainer; import net.modificationstation.stationapi.api.util.Identifier; @@ -23,7 +23,7 @@ @EventListener(phase = StationAPI.INTERNAL_PHASE) public final class VanillaDimensionFixImpl { static { - Listener.registerLookup(MethodHandles.lookup()); + EntrypointManager.registerLookup(MethodHandles.lookup()); } @FunctionalInterface diff --git a/station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/item/VanillaItemFixImpl.java b/station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/item/VanillaItemFixImpl.java index ca0603605..ca58ff93e 100644 --- a/station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/item/VanillaItemFixImpl.java +++ b/station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/item/VanillaItemFixImpl.java @@ -1,11 +1,11 @@ package net.modificationstation.stationapi.impl.vanillafix.item; import net.mine_diver.unsafeevents.listener.EventListener; -import net.mine_diver.unsafeevents.listener.Listener; import net.minecraft.item.Item; import net.modificationstation.stationapi.api.StationAPI; import net.modificationstation.stationapi.api.event.registry.ItemRegistryEvent; import net.modificationstation.stationapi.api.mod.entrypoint.Entrypoint; +import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; import net.modificationstation.stationapi.api.mod.entrypoint.EventBusPolicy; import net.modificationstation.stationapi.api.registry.ItemRegistry; import net.modificationstation.stationapi.api.registry.Registry; @@ -20,7 +20,7 @@ @EventListener(phase = StationAPI.INTERNAL_PHASE) public final class VanillaItemFixImpl { static { - Listener.registerLookup(MethodHandles.lookup()); + EntrypointManager.registerLookup(MethodHandles.lookup()); } @EventListener diff --git a/station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/recipe/VanillaFuelItemFixImpl.java b/station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/recipe/VanillaFuelItemFixImpl.java index c756adb6a..7b09d1d72 100644 --- a/station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/recipe/VanillaFuelItemFixImpl.java +++ b/station-vanilla-fix-v0/src/main/java/net/modificationstation/stationapi/impl/vanillafix/recipe/VanillaFuelItemFixImpl.java @@ -1,13 +1,13 @@ package net.modificationstation.stationapi.impl.vanillafix.recipe; import net.mine_diver.unsafeevents.listener.EventListener; -import net.mine_diver.unsafeevents.listener.Listener; import net.minecraft.block.Block; import net.minecraft.block.Material; import net.minecraft.item.Item; import net.modificationstation.stationapi.api.StationAPI; import net.modificationstation.stationapi.api.event.recipe.RecipeRegisterEvent; import net.modificationstation.stationapi.api.mod.entrypoint.Entrypoint; +import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; import net.modificationstation.stationapi.api.mod.entrypoint.EventBusPolicy; import net.modificationstation.stationapi.api.recipe.FuelRegistry; import net.modificationstation.stationapi.api.registry.tag.ItemTags; @@ -18,7 +18,7 @@ @EventListener(phase = StationAPI.INTERNAL_PHASE) public final class VanillaFuelItemFixImpl { static { - Listener.registerLookup(MethodHandles.lookup()); + EntrypointManager.registerLookup(MethodHandles.lookup()); } @EventListener From f98d080b7c1c371649012e9f302163599de4939c Mon Sep 17 00:00:00 2001 From: mine_diver Date: Fri, 3 Jan 2025 23:14:43 +0500 Subject: [PATCH 2/6] Removed EnumFactory. --- .../stationapi/api/factory/EnumFactory.java | 138 ------------------ .../api/entity/EntityTypeFactory.java | 9 +- .../mixin/entity/EntityTypeAccessor.java | 16 ++ .../resources/station-entities-v0.mixins.json | 3 +- .../api/client/option/OptionFactory.java | 10 +- .../keybinding/client/OptionAccessor.java | 14 ++ .../station-keybindings-v0.mixins.json | 1 + .../api/item/tool/ToolMaterialFactory.java | 10 +- .../mixin/tools/ToolMaterialAccessor.java | 14 ++ .../station-tools-api-v1.mixins.json | 1 + 10 files changed, 59 insertions(+), 157 deletions(-) delete mode 100644 station-api-base/src/main/java/net/modificationstation/stationapi/api/factory/EnumFactory.java create mode 100644 station-entities-v0/src/main/java/net/modificationstation/stationapi/mixin/entity/EntityTypeAccessor.java create mode 100644 station-keybindings-v0/src/main/java/net/modificationstation/stationapi/mixin/keybinding/client/OptionAccessor.java create mode 100644 station-tools-api-v1/src/main/java/net/modificationstation/stationapi/mixin/tools/ToolMaterialAccessor.java diff --git a/station-api-base/src/main/java/net/modificationstation/stationapi/api/factory/EnumFactory.java b/station-api-base/src/main/java/net/modificationstation/stationapi/api/factory/EnumFactory.java deleted file mode 100644 index 511938b98..000000000 --- a/station-api-base/src/main/java/net/modificationstation/stationapi/api/factory/EnumFactory.java +++ /dev/null @@ -1,138 +0,0 @@ -package net.modificationstation.stationapi.api.factory; - -import sun.reflect.ReflectionFactory; - -import java.lang.invoke.MethodHandle; -import java.lang.invoke.MethodHandles; -import java.lang.invoke.MethodType; -import java.lang.reflect.Array; -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import java.lang.reflect.Modifier; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; -import java.util.function.BiFunction; -import java.util.function.Function; - -import static net.modificationstation.stationapi.api.util.UnsafeProvider.theUnsafe; - -public class EnumFactory { - private static final Function, Object> NEW_CONSTRUCTOR_ACCESSOR; - private static final BiFunction NEW_INSTANCE; - - static { - try { - Field implLookupField = MethodHandles.Lookup.class.getDeclaredField("IMPL_LOOKUP"); - MethodHandles.Lookup implLookup = (MethodHandles.Lookup) theUnsafe.getObject(theUnsafe.staticFieldBase(implLookupField), theUnsafe.staticFieldOffset(implLookupField)); - Field rfDelegateField = ReflectionFactory.class.getDeclaredField("delegate"); - Class rfClass = rfDelegateField.getType(); - rfDelegateField.setAccessible(true); - Object reflectionFactory = rfDelegateField.get(null); - Class constructorAccessorClass = Class.forName("jdk.internal.reflect.ConstructorAccessor"); - MethodHandle newConstructorAccessorHandle = implLookup.findVirtual(rfClass, "newConstructorAccessor", MethodType.methodType(constructorAccessorClass, Constructor.class)); - MethodHandle newInstanceHandle = implLookup.findVirtual(constructorAccessorClass, "newInstance", MethodType.methodType(Object.class, Object[].class)); - NEW_CONSTRUCTOR_ACCESSOR = constructor -> { - try { - return newConstructorAccessorHandle.invoke(reflectionFactory, constructor); - } catch (Throwable e) { - throw new RuntimeException(e); - } - }; - NEW_INSTANCE = (constructorAccessor, params) -> { - try { - return newInstanceHandle.invoke(constructorAccessor, params); - } catch (Throwable e) { - throw new RuntimeException(e); - } - }; - } catch (NoSuchFieldException | IllegalAccessException | ClassNotFoundException | NoSuchMethodException e) { - throw new RuntimeException(e); - } - } - - private static Object getConstructorAccessor(Class enumClass, Class[] additionalParameterTypes) throws Exception { - Class[] parameterTypes = new Class[additionalParameterTypes.length + 2]; - parameterTypes[0] = String.class; - parameterTypes[1] = int.class; - System.arraycopy(additionalParameterTypes, 0, parameterTypes, 2, additionalParameterTypes.length); - return NEW_CONSTRUCTOR_ACCESSOR.apply(enumClass.getDeclaredConstructor(parameterTypes)); - } - - private static > T makeEnum(Class enumClass, String value, int ordinal, Class[] additionalTypes, Object... additionalValues) throws Exception { - Object[] parms = new Object[additionalValues.length + 2]; - parms[0] = value; - parms[1] = ordinal; - System.arraycopy(additionalValues, 0, parms, 2, additionalValues.length); - return enumClass.cast(NEW_INSTANCE.apply(getConstructorAccessor(enumClass, additionalTypes), parms)); - } - - private static void setFailsafeFieldValue(Field field, Object target, Object value) { - Object fieldBase; - long fieldOffset; - if (Modifier.isStatic(field.getModifiers())) { - fieldBase = theUnsafe.staticFieldBase(field); - fieldOffset = theUnsafe.staticFieldOffset(field); - } else { - fieldBase = target; - fieldOffset = theUnsafe.objectFieldOffset(field); - } - theUnsafe.putObject(fieldBase, fieldOffset, value); - } - - private static void blankField(Class enumClass, String fieldName) { - for (Field field : Class.class.getDeclaredFields()) - if (field.getName().contains(fieldName)) { - setFailsafeFieldValue(field, enumClass, null); - break; - } - } - - private static void cleanEnumCache(Class enumClass) { - blankField(enumClass, "enumConstantDirectory"); - blankField(enumClass, "enumConstants"); - } - - public static > T addEnum(Class enumType, String enumName, Class[] paramTypes, Object... paramValues) { - Field valuesField = null; - Field[] fields = enumType.getDeclaredFields(); - - for (Field field : fields) { - String name = field.getName(); - if (name.equals("$VALUES") || name.equals("ENUM$VALUES")) { //Added 'ENUM$VALUES' because Eclipse's internal compiler doesn't follow standards - valuesField = field; - break; - } - } - - int flags = Modifier.PRIVATE | Modifier.STATIC | Modifier.FINAL | 0x1000 /*SYNTHETIC*/; - if (valuesField == null) { - String valueType = String.format("[L%s;", enumType.getName().replace('.', '/')); - - for (Field field : fields) - if ((field.getModifiers() & flags) == flags && - field.getType().getName().replace('.', '/').equals(valueType)) { //Apparently some JVMs return .'s and some don't.. - valuesField = field; - break; - } - } - - Objects.requireNonNull(valuesField).setAccessible(true); - - try { - Object[] previousValues = (Object[]) valuesField.get(enumType); - List values = new ArrayList<>(); - for (Object previousValue : previousValues) - values.add(enumType.cast(previousValue)); - T newValue = makeEnum(enumType, enumName, values.size(), paramTypes, paramValues); - values.add(newValue); - @SuppressWarnings("unchecked") - T[] valuesArray = values.toArray((T[]) Array.newInstance(enumType, 0)); - setFailsafeFieldValue(valuesField, null, valuesArray); - cleanEnumCache(enumType); - return enumType.cast(newValue); - } catch (Exception e) { - throw new RuntimeException(e); - } - } -} diff --git a/station-entities-v0/src/main/java/net/modificationstation/stationapi/api/entity/EntityTypeFactory.java b/station-entities-v0/src/main/java/net/modificationstation/stationapi/api/entity/EntityTypeFactory.java index 55939202e..a44685410 100644 --- a/station-entities-v0/src/main/java/net/modificationstation/stationapi/api/entity/EntityTypeFactory.java +++ b/station-entities-v0/src/main/java/net/modificationstation/stationapi/api/entity/EntityTypeFactory.java @@ -5,16 +5,13 @@ import net.minecraft.block.Material; import net.minecraft.class_238; import net.minecraft.entity.Entity; -import net.modificationstation.stationapi.api.factory.EnumFactory; +import net.modificationstation.stationapi.mixin.entity.EntityTypeAccessor; @NoArgsConstructor(access = AccessLevel.PRIVATE) public final class EntityTypeFactory { + private static int nextId = class_238.values().length; public static class_238 create(String typeName, Class typeSuperClass, int unusedInt, Material spawnMaterial, boolean unusedBoolean) { - return EnumFactory.addEnum( - class_238.class, typeName, - new Class[] { Class.class, int.class, Material.class, boolean.class }, - typeSuperClass, unusedInt, spawnMaterial, unusedBoolean - ); + return EntityTypeAccessor.stationapi_create(typeName, nextId++, typeSuperClass, unusedInt, spawnMaterial, unusedBoolean); } } diff --git a/station-entities-v0/src/main/java/net/modificationstation/stationapi/mixin/entity/EntityTypeAccessor.java b/station-entities-v0/src/main/java/net/modificationstation/stationapi/mixin/entity/EntityTypeAccessor.java new file mode 100644 index 000000000..e3a8a07ce --- /dev/null +++ b/station-entities-v0/src/main/java/net/modificationstation/stationapi/mixin/entity/EntityTypeAccessor.java @@ -0,0 +1,16 @@ +package net.modificationstation.stationapi.mixin.entity; + +import net.minecraft.block.Material; +import net.minecraft.class_238; +import net.minecraft.entity.Entity; +import net.modificationstation.stationapi.api.util.Util; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + +@Mixin(class_238.class) +public interface EntityTypeAccessor { + @Invoker("") + static class_238 stationapi_create(String typeName, int id, Class typeSuperClass, int unusedInt, Material spawnMaterial, boolean unusedBoolean) { + return Util.assertMixin(); + } +} diff --git a/station-entities-v0/src/main/resources/station-entities-v0.mixins.json b/station-entities-v0/src/main/resources/station-entities-v0.mixins.json index 61f9769cf..4c0a4f7c4 100644 --- a/station-entities-v0/src/main/resources/station-entities-v0.mixins.json +++ b/station-entities-v0/src/main/resources/station-entities-v0.mixins.json @@ -4,7 +4,8 @@ "package": "net.modificationstation.stationapi.mixin.entity", "compatibilityLevel": "JAVA_17", "mixins": [ - "EntityRegistryMixin" + "EntityRegistryMixin", + "EntityTypeAccessor" ], "server": [ "server.ServerEntityTrackerMixin", diff --git a/station-keybindings-v0/src/main/java/net/modificationstation/stationapi/api/client/option/OptionFactory.java b/station-keybindings-v0/src/main/java/net/modificationstation/stationapi/api/client/option/OptionFactory.java index de59d51de..481dc3b94 100644 --- a/station-keybindings-v0/src/main/java/net/modificationstation/stationapi/api/client/option/OptionFactory.java +++ b/station-keybindings-v0/src/main/java/net/modificationstation/stationapi/api/client/option/OptionFactory.java @@ -3,15 +3,13 @@ import lombok.AccessLevel; import lombok.NoArgsConstructor; import net.minecraft.client.option.Option; -import net.modificationstation.stationapi.api.factory.EnumFactory; +import net.modificationstation.stationapi.mixin.keybinding.client.OptionAccessor; @NoArgsConstructor(access = AccessLevel.PRIVATE) public final class OptionFactory { + private static int nextId = Option.values().length; + public static Option create(String optionName, String translationKey, boolean slider, boolean toggle) { - return EnumFactory.addEnum( - Option.class, optionName, - new Class[] { String.class, boolean.class, boolean.class }, - translationKey, slider, toggle - ); + return OptionAccessor.stationapi_create(optionName, nextId++, translationKey, slider, toggle); } } diff --git a/station-keybindings-v0/src/main/java/net/modificationstation/stationapi/mixin/keybinding/client/OptionAccessor.java b/station-keybindings-v0/src/main/java/net/modificationstation/stationapi/mixin/keybinding/client/OptionAccessor.java new file mode 100644 index 000000000..b98ca0716 --- /dev/null +++ b/station-keybindings-v0/src/main/java/net/modificationstation/stationapi/mixin/keybinding/client/OptionAccessor.java @@ -0,0 +1,14 @@ +package net.modificationstation.stationapi.mixin.keybinding.client; + +import net.minecraft.client.option.Option; +import net.modificationstation.stationapi.api.util.Util; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + +@Mixin(Option.class) +public interface OptionAccessor { + @Invoker("") + static Option stationapi_create(String optionName, int id, String translationKey, boolean slider, boolean toggle) { + return Util.assertMixin(); + } +} diff --git a/station-keybindings-v0/src/main/resources/station-keybindings-v0.mixins.json b/station-keybindings-v0/src/main/resources/station-keybindings-v0.mixins.json index e08db3268..6b4bad74b 100644 --- a/station-keybindings-v0/src/main/resources/station-keybindings-v0.mixins.json +++ b/station-keybindings-v0/src/main/resources/station-keybindings-v0.mixins.json @@ -8,6 +8,7 @@ "client": [ "client.GameOptionsMixin", "client.MinecraftMixin", + "client.OptionAccessor", "client.ScreenMixin" ], "injectors": { diff --git a/station-tools-api-v1/src/main/java/net/modificationstation/stationapi/api/item/tool/ToolMaterialFactory.java b/station-tools-api-v1/src/main/java/net/modificationstation/stationapi/api/item/tool/ToolMaterialFactory.java index 8ecfecadd..73701ab88 100644 --- a/station-tools-api-v1/src/main/java/net/modificationstation/stationapi/api/item/tool/ToolMaterialFactory.java +++ b/station-tools-api-v1/src/main/java/net/modificationstation/stationapi/api/item/tool/ToolMaterialFactory.java @@ -1,14 +1,12 @@ package net.modificationstation.stationapi.api.item.tool; import net.minecraft.item.ToolMaterial; -import net.modificationstation.stationapi.api.factory.EnumFactory; +import net.modificationstation.stationapi.mixin.tools.ToolMaterialAccessor; public class ToolMaterialFactory { + private static int nextId = ToolMaterial.values().length; + public static ToolMaterial create(String materialName, int miningLevel, int durability, float miningSpeed, int attackDamage) { - return EnumFactory.addEnum( - ToolMaterial.class, materialName, - new Class[] { int.class, int.class, float.class, int.class }, - miningLevel, durability, miningSpeed, attackDamage - ); + return ToolMaterialAccessor.stationapi_create(materialName, nextId++, miningLevel, durability, miningSpeed, attackDamage); } } diff --git a/station-tools-api-v1/src/main/java/net/modificationstation/stationapi/mixin/tools/ToolMaterialAccessor.java b/station-tools-api-v1/src/main/java/net/modificationstation/stationapi/mixin/tools/ToolMaterialAccessor.java new file mode 100644 index 000000000..3896d4d31 --- /dev/null +++ b/station-tools-api-v1/src/main/java/net/modificationstation/stationapi/mixin/tools/ToolMaterialAccessor.java @@ -0,0 +1,14 @@ +package net.modificationstation.stationapi.mixin.tools; + +import net.minecraft.item.ToolMaterial; +import net.modificationstation.stationapi.api.util.Util; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; + +@Mixin(ToolMaterial.class) +public interface ToolMaterialAccessor { + @Invoker("") + static ToolMaterial stationapi_create(String materialName, int id, int miningLevel, int itemDurability, float miningSpeed, int attackDamage) { + return Util.assertMixin(); + } +} diff --git a/station-tools-api-v1/src/main/resources/station-tools-api-v1.mixins.json b/station-tools-api-v1/src/main/resources/station-tools-api-v1.mixins.json index f97415b04..465657227 100644 --- a/station-tools-api-v1/src/main/resources/station-tools-api-v1.mixins.json +++ b/station-tools-api-v1/src/main/resources/station-tools-api-v1.mixins.json @@ -12,6 +12,7 @@ "ShovelItemMixin", "SwordItemMixin", "ToolItemMixin", + "ToolMaterialAccessor", "ToolMaterialMixin" ], "server": [ From 2d6b8420312461f67a65ae24620610e7e9b1bb77 Mon Sep 17 00:00:00 2001 From: mine_diver Date: Fri, 3 Jan 2025 23:21:03 +0500 Subject: [PATCH 3/6] Removed NativeImage Unsafe buffer cleaner invocation. --- .../stationapi/api/client/texture/NativeImage.java | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/texture/NativeImage.java b/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/texture/NativeImage.java index ac24097e8..213e1d122 100644 --- a/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/texture/NativeImage.java +++ b/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/texture/NativeImage.java @@ -10,14 +10,12 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.option.GameOptions; import net.minecraft.client.util.GlAllocationUtils; -import net.modificationstation.stationapi.api.util.UnsafeProvider; import net.modificationstation.stationapi.api.util.Util; import org.apache.commons.io.IOUtils; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.lwjgl.MemoryUtil; import org.lwjgl.opengl.GL11; -import sun.misc.Unsafe; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; @@ -39,9 +37,6 @@ @Environment(EnvType.CLIENT) public final class NativeImage implements AutoCloseable { - - private static final Unsafe UNSAFE = UnsafeProvider.theUnsafe; - private static final Int2IntMap BUFFERED_TO_NATIVE = Int2IntMaps.unmodifiable(Util.make(new Int2IntOpenHashMap(), map -> { map.defaultReturnValue(-1); map.put(BufferedImage.TYPE_INT_ARGB, 0); @@ -171,8 +166,7 @@ private void checkAllocated() { @Override public void close() { - if (buffer != null) - UNSAFE.invokeCleaner(buffer); + // GC should be able to take care of this buffer = null; } From d389af2b8301dba9cf73964f39bf4415aa8bfa57 Mon Sep 17 00:00:00 2001 From: mine_diver Date: Sat, 4 Jan 2025 00:17:26 +0500 Subject: [PATCH 4/6] Replaced fake BlockItem with null, since MixinExtras allows that, unlike vanilla Mixin's Redirect. --- .../impl/block/BlockFormOnlyHandler.java | 14 -------------- .../stationapi/mixin/blockitem/BlockMixin.java | 3 +-- 2 files changed, 1 insertion(+), 16 deletions(-) diff --git a/station-blockitems-v0/src/main/java/net/modificationstation/stationapi/impl/block/BlockFormOnlyHandler.java b/station-blockitems-v0/src/main/java/net/modificationstation/stationapi/impl/block/BlockFormOnlyHandler.java index 250783a3f..6725f43aa 100644 --- a/station-blockitems-v0/src/main/java/net/modificationstation/stationapi/impl/block/BlockFormOnlyHandler.java +++ b/station-blockitems-v0/src/main/java/net/modificationstation/stationapi/impl/block/BlockFormOnlyHandler.java @@ -1,18 +1,13 @@ package net.modificationstation.stationapi.impl.block; -import com.google.common.base.Suppliers; import net.mine_diver.unsafeevents.listener.EventListener; -import net.minecraft.item.BlockItem; import net.modificationstation.stationapi.api.StationAPI; import net.modificationstation.stationapi.api.event.block.BlockItemFactoryEvent; import net.modificationstation.stationapi.api.mod.entrypoint.Entrypoint; import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; import net.modificationstation.stationapi.api.mod.entrypoint.EventBusPolicy; -import net.modificationstation.stationapi.api.util.UnsafeProvider; -import org.jetbrains.annotations.ApiStatus; import java.lang.invoke.MethodHandles; -import java.util.function.Supplier; @Entrypoint(eventBus = @EventBusPolicy(registerInstance = false)) @EventListener(phase = StationAPI.INTERNAL_PHASE) @@ -21,15 +16,6 @@ public class BlockFormOnlyHandler { EntrypointManager.registerLookup(MethodHandles.lookup()); } - @ApiStatus.Internal - public static final Supplier EMPTY_BLOCK_ITEM = Suppliers.memoize(() -> { - try { - return (BlockItem) UnsafeProvider.theUnsafe.allocateInstance(BlockItem.class); - } catch (InstantiationException e) { - throw new RuntimeException(e); - } - }); - @EventListener private static void registerBlockItem(BlockItemFactoryEvent event) { if (event.block.isAutoItemRegistrationDisabled()) event.cancel(); diff --git a/station-blockitems-v0/src/main/java/net/modificationstation/stationapi/mixin/blockitem/BlockMixin.java b/station-blockitems-v0/src/main/java/net/modificationstation/stationapi/mixin/blockitem/BlockMixin.java index 7fef77cda..b2ee4da68 100644 --- a/station-blockitems-v0/src/main/java/net/modificationstation/stationapi/mixin/blockitem/BlockMixin.java +++ b/station-blockitems-v0/src/main/java/net/modificationstation/stationapi/mixin/blockitem/BlockMixin.java @@ -13,7 +13,6 @@ import net.modificationstation.stationapi.api.registry.BlockRegistry; import net.modificationstation.stationapi.api.registry.ItemRegistry; import net.modificationstation.stationapi.api.registry.Registry; -import net.modificationstation.stationapi.impl.block.BlockFormOnlyHandler; import org.objectweb.asm.Opcodes; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; @@ -65,7 +64,7 @@ private static BlockItem stationapi_getBlockItem(int blockId, Operation Date: Sat, 4 Jan 2025 00:18:15 +0500 Subject: [PATCH 5/6] Removed UnsafeProvider. --- .../stationapi/api/util/UnsafeProvider.java | 20 ------------------- 1 file changed, 20 deletions(-) delete mode 100644 station-api-base/src/main/java/net/modificationstation/stationapi/api/util/UnsafeProvider.java diff --git a/station-api-base/src/main/java/net/modificationstation/stationapi/api/util/UnsafeProvider.java b/station-api-base/src/main/java/net/modificationstation/stationapi/api/util/UnsafeProvider.java deleted file mode 100644 index f66a88ef3..000000000 --- a/station-api-base/src/main/java/net/modificationstation/stationapi/api/util/UnsafeProvider.java +++ /dev/null @@ -1,20 +0,0 @@ -package net.modificationstation.stationapi.api.util; - -import sun.misc.Unsafe; - -import java.lang.reflect.Field; - -public class UnsafeProvider { - @API - public static final Unsafe theUnsafe; - - static { - try { - Field field = Unsafe.class.getDeclaredField("theUnsafe"); - field.setAccessible(true); - theUnsafe = (Unsafe) field.get(null); - } catch (NoSuchFieldException | IllegalAccessException e) { - throw new RuntimeException(e); - } - } -} From f762d18dcafd1644a23f2f641c6bb415d30805f7 Mon Sep 17 00:00:00 2001 From: mine_diver Date: Thu, 9 Jan 2025 23:22:23 +0500 Subject: [PATCH 6/6] Updated javadoc for EntrypointManager#registerLookup --- .../api/mod/entrypoint/EntrypointManager.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/station-api-base/src/main/java/net/modificationstation/stationapi/api/mod/entrypoint/EntrypointManager.java b/station-api-base/src/main/java/net/modificationstation/stationapi/api/mod/entrypoint/EntrypointManager.java index 51bc3ac72..7be2debae 100644 --- a/station-api-base/src/main/java/net/modificationstation/stationapi/api/mod/entrypoint/EntrypointManager.java +++ b/station-api-base/src/main/java/net/modificationstation/stationapi/api/mod/entrypoint/EntrypointManager.java @@ -22,6 +22,34 @@ public class EntrypointManager { private static final Reference2ReferenceMap, MethodHandles.Lookup> LOOKUPS = new Reference2ReferenceOpenHashMap<>(); + /** + * By registering a lookup via this method, an entrypoint class gives StationAPI and UnsafeEvents safe access to + * its non-public fields and methods. + * + *

+ * This is useful if you wish to keep your + * {@link net.mine_diver.unsafeevents.listener.EventListener listener methods} or utility fields + * (such as {@link net.modificationstation.stationapi.api.mod.entrypoint.Entrypoint.Instance}, + * {@link net.modificationstation.stationapi.api.mod.entrypoint.Entrypoint.Namespace}, + * and {@link net.modificationstation.stationapi.api.mod.entrypoint.Entrypoint.Logger}) private. + *

+ * + *

+ * It's best to perform the registration as soon as possible in the static initializer of the class, + * for example: + *


+     *         public class ExampleEntrypoint {
+     *             static {
+     *                 EntrypointManager.registerLookup(MethodHandles.lookup());
+     *             }
+     *
+     *             // ... the rest of the entrypoint code ...
+     *         }
+     *     
+ *

+ * + * @param lookup an entrypoint class's lookup obtained via {@link MethodHandles#lookup()}. + */ public static void registerLookup(MethodHandles.Lookup lookup) { Listener.registerLookup(lookup); LOOKUPS.put(lookup.lookupClass(), lookup);