diff --git a/build.gradle b/build.gradle index 0973ddf..9140f31 100644 --- a/build.gradle +++ b/build.gradle @@ -84,6 +84,10 @@ tasks.withType(JavaCompile).configureEach { if (lljij.toBoolean()) jarJar.enable() +java { + withSourcesJar() +} + jar { manifest { attributes([ diff --git a/gradle.properties b/gradle.properties index c1d3e7b..56657a0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -10,7 +10,7 @@ neogradle.subsystems.parchment.mappingsVersion=2024.06.02 minecraft_version=1.21 minecraft_version_range=[1.21,1.22) -neo_version=21.0.19-beta +neo_version=21.0.30-beta neo_version_range=[21.0,) loader_version_range=[2,) @@ -18,7 +18,7 @@ loader_version_range=[2,) mod_id=l2core mod_name=L2Core mod_license=LGPL-2.1 -mod_version=3.0.0 +mod_version=3.0.1 mod_group_id=dev.xkmc mod_authors=lcy0x1 mod_description=Core Library mod for all L2 mods diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..c1962a7 Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..2617362 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip +networkTimeout=10000 +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/src/main/java/dev/xkmc/l2core/base/menu/base/BaseContainerMenu.java b/src/main/java/dev/xkmc/l2core/base/menu/base/BaseContainerMenu.java index 201078d..083ca20 100644 --- a/src/main/java/dev/xkmc/l2core/base/menu/base/BaseContainerMenu.java +++ b/src/main/java/dev/xkmc/l2core/base/menu/base/BaseContainerMenu.java @@ -1,6 +1,7 @@ package dev.xkmc.l2core.base.menu.base; import dev.xkmc.l2serial.util.Wrappers; +import net.minecraft.core.RegistryAccess; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.Container; import net.minecraft.world.SimpleContainer; @@ -87,11 +88,14 @@ public class BaseContainerMenu> extends AbstractC } public final Inventory inventory; + public final Player player; public final Container container; - public final SpriteManager sprite; + public final RegistryAccess access; protected int added = 0; protected final boolean isVirtual; + private final SpriteManager sprite; + private boolean updating = false; private final Map slotMap = new TreeMap<>(SlotKey.COMPARATOR); @@ -109,14 +113,20 @@ public class BaseContainerMenu> extends AbstractC protected BaseContainerMenu(MenuType type, int wid, Inventory plInv, SpriteManager manager, Function factory, boolean isVirtual) { super(type, wid); this.inventory = plInv; + this.player = plInv.player; container = factory.apply(Wrappers.cast(this)); sprite = manager; - int x = manager.get().getPlInvX(); - int y = manager.get().getPlInvY(); + access = plInv.player.level().registryAccess(); + int x = getLayout().getPlInvX(); + int y = getLayout().getPlInvY(); this.bindPlayerInventory(plInv, x, y); this.isVirtual = isVirtual; } + public MenuLayoutConfig getLayout() { + return sprite.get(access); + } + /** * Binds player inventory. Should not be called by others, but permits override. */ @@ -146,7 +156,7 @@ public class BaseContainerMenu> extends AbstractC * Add new slots, with item input predicate */ protected void addSlot(String name, Predicate pred) { - sprite.get().getSlot(name, (x, y) -> new PredSlot(container, added++, x, y, pred), this::addSlot); + getLayout().getSlot(name, (x, y) -> new PredSlot(container, added++, x, y, pred), this::addSlot); } /** @@ -155,7 +165,7 @@ public class BaseContainerMenu> extends AbstractC */ protected void addSlot(String name, BiPredicate pred) { int current = added; - sprite.get().getSlot(name, (x, y) -> { + getLayout().getSlot(name, (x, y) -> { int i = added - current; var ans = new PredSlot(container, added, x, y, e -> pred.test(i, e)); added++; @@ -167,7 +177,7 @@ public class BaseContainerMenu> extends AbstractC * Add new slots, with other modifications to the slot. */ protected void addSlot(String name, Predicate pred, Consumer modifier) { - sprite.get().getSlot(name, (x, y) -> { + getLayout().getSlot(name, (x, y) -> { PredSlot s = new PredSlot(container, added++, x, y, pred); modifier.accept(s); return s; @@ -180,7 +190,7 @@ public class BaseContainerMenu> extends AbstractC */ protected void addSlot(String name, BiPredicate pred, BiConsumer modifier) { int current = added; - sprite.get().getSlot(name, (x, y) -> { + getLayout().getSlot(name, (x, y) -> { int i = added - current; var ans = new PredSlot(container, added, x, y, e -> pred.test(i, e)); modifier.accept(i, ans); diff --git a/src/main/java/dev/xkmc/l2core/base/menu/base/BaseContainerScreen.java b/src/main/java/dev/xkmc/l2core/base/menu/base/BaseContainerScreen.java index 3bb452e..da62ffc 100644 --- a/src/main/java/dev/xkmc/l2core/base/menu/base/BaseContainerScreen.java +++ b/src/main/java/dev/xkmc/l2core/base/menu/base/BaseContainerScreen.java @@ -1,6 +1,5 @@ package dev.xkmc.l2core.base.menu.base; -import dev.xkmc.l2core.util.Proxy; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; @@ -11,8 +10,8 @@ public abstract class BaseContainerScreen> extend public BaseContainerScreen(T cont, Inventory plInv, Component title) { super(cont, plInv, title); - this.imageHeight = menu.sprite.get().getHeight(); - this.inventoryLabelY = menu.sprite.get().getPlInvY() - 11; + this.imageHeight = menu.getLayout().getHeight(); + this.inventoryLabelY = menu.getLayout().getPlInvY() - 11; } @Override @@ -22,7 +21,7 @@ public abstract class BaseContainerScreen> extend } protected boolean click(int btn) { - if (menu.clickMenuButton(Proxy.getClientPlayer(), btn) && Minecraft.getInstance().gameMode != null) { + if (menu.clickMenuButton(menu.player, btn) && Minecraft.getInstance().gameMode != null) { Minecraft.getInstance().gameMode.handleInventoryButtonClick(this.menu.containerId, btn); return true; } diff --git a/src/main/java/dev/xkmc/l2core/base/menu/base/SpriteManager.java b/src/main/java/dev/xkmc/l2core/base/menu/base/SpriteManager.java index d13fdba..a3abdbf 100644 --- a/src/main/java/dev/xkmc/l2core/base/menu/base/SpriteManager.java +++ b/src/main/java/dev/xkmc/l2core/base/menu/base/SpriteManager.java @@ -1,6 +1,7 @@ package dev.xkmc.l2core.base.menu.base; import dev.xkmc.l2core.init.L2LibReg; +import net.minecraft.core.RegistryAccess; import net.minecraft.resources.ResourceLocation; public record SpriteManager(ResourceLocation id) { @@ -9,8 +10,8 @@ public record SpriteManager(ResourceLocation id) { this(ResourceLocation.fromNamespaceAndPath(modid, path)); } - public MenuLayoutConfig get() { - return L2LibReg.MENU_LAYOUT.get(id); + public MenuLayoutConfig get(RegistryAccess access) { + return L2LibReg.MENU_LAYOUT.get(access, id).value(); } } diff --git a/src/main/java/dev/xkmc/l2core/init/reg/datapack/DataMapReg.java b/src/main/java/dev/xkmc/l2core/init/reg/datapack/DataMapReg.java index 5198eac..6ab45a2 100644 --- a/src/main/java/dev/xkmc/l2core/init/reg/datapack/DataMapReg.java +++ b/src/main/java/dev/xkmc/l2core/init/reg/datapack/DataMapReg.java @@ -1,29 +1,34 @@ package dev.xkmc.l2core.init.reg.datapack; import com.mojang.datafixers.util.Pair; -import dev.xkmc.l2core.util.Proxy; +import net.minecraft.core.Holder; +import net.minecraft.core.RegistryAccess; import net.neoforged.neoforge.registries.datamaps.DataMapType; import net.neoforged.neoforge.registries.datamaps.RegisterDataMapTypesEvent; import org.jetbrains.annotations.Nullable; import java.util.stream.Stream; -public record DataMapReg(DataMapType reg) implements ValSet { +public record DataMapReg(DataMapType reg) { public void register(final RegisterDataMapTypesEvent event) { event.register(reg); } @Nullable - public V get(K key) { - var registry = Proxy.getRegistryAccess().registry(reg.registryKey()).get(); - return registry.getData(reg, registry.getResourceKey(key).get()); + public V get(RegistryAccess access, Holder key) { + var registry = access.registry(reg.registryKey()); + if (registry.isEmpty()) return null; + var id = key.unwrapKey(); + if (id.isEmpty()) return null; + return registry.get().getData(reg, id.get()); } - public Stream> getAll() { - var registry = Proxy.getRegistryAccess().registry(reg.registryKey()).get(); - return registry.getDataMap(reg).entrySet().stream() - .map(e -> Pair.of(registry.get(e.getKey()), e.getValue())); + public Stream, V>> getAll(RegistryAccess access) { + var registry = access.registry(reg.registryKey()); + if (registry.isEmpty()) return Stream.empty(); + return registry.get().getDataMap(reg).entrySet().stream() + .map(e -> Pair.of(registry.get().getHolderOrThrow(e.getKey()), e.getValue())); } } diff --git a/src/main/java/dev/xkmc/l2core/init/reg/datapack/DatapackReg.java b/src/main/java/dev/xkmc/l2core/init/reg/datapack/DatapackReg.java index e501a12..6d4bc26 100644 --- a/src/main/java/dev/xkmc/l2core/init/reg/datapack/DatapackReg.java +++ b/src/main/java/dev/xkmc/l2core/init/reg/datapack/DatapackReg.java @@ -1,28 +1,33 @@ package dev.xkmc.l2core.init.reg.datapack; -import com.mojang.datafixers.util.Pair; import com.mojang.serialization.Codec; -import dev.xkmc.l2core.util.Proxy; +import net.minecraft.core.Holder; import net.minecraft.core.Registry; +import net.minecraft.core.RegistryAccess; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; import net.neoforged.neoforge.registries.DataPackRegistryEvent; +import javax.annotation.Nullable; import java.util.stream.Stream; -public record DatapackReg(ResourceKey> key, Codec codec) implements ValSet { +public record DatapackReg(ResourceKey> key, Codec codec) { public void onRegister(DataPackRegistryEvent.NewRegistry event) { event.dataPackRegistry(key, codec, codec); } - public T get(ResourceLocation id) { - return Proxy.getRegistryAccess().registry(key).get().get(id); + @Nullable + public Holder get(RegistryAccess access, ResourceLocation id) { + var reg = access.registry(key); + if (reg.isEmpty()) return null; + return reg.get().getHolder(id).orElse(null); } - public Stream> getAll() { - return Proxy.getRegistryAccess().registry(key).get().entrySet() - .stream().map(e -> Pair.of(e.getKey().location(), e.getValue())); + public Stream> getAll(RegistryAccess access) { + var reg = access.registry(key); + if (reg.isEmpty()) return Stream.empty(); + return reg.get().holders().map(e -> e); } } diff --git a/src/main/java/dev/xkmc/l2core/init/reg/datapack/ValSet.java b/src/main/java/dev/xkmc/l2core/init/reg/datapack/ValSet.java deleted file mode 100644 index c85ed64..0000000 --- a/src/main/java/dev/xkmc/l2core/init/reg/datapack/ValSet.java +++ /dev/null @@ -1,15 +0,0 @@ -package dev.xkmc.l2core.init.reg.datapack; - -import com.mojang.datafixers.util.Pair; -import org.jetbrains.annotations.Nullable; - -import java.util.stream.Stream; - -public interface ValSet { - - @Nullable - V get(K k); - - Stream> getAll(); - -} diff --git a/src/main/java/dev/xkmc/l2core/util/Proxy.java b/src/main/java/dev/xkmc/l2core/util/Proxy.java index 77dc195..a09a977 100644 --- a/src/main/java/dev/xkmc/l2core/util/Proxy.java +++ b/src/main/java/dev/xkmc/l2core/util/Proxy.java @@ -13,6 +13,7 @@ import java.util.Optional; public class Proxy { + @Deprecated public static RegistryAccess getRegistryAccess() { if (FMLEnvironment.dist == Dist.CLIENT) { return Minecraft.getInstance().level.registryAccess();