diff --git a/.gitignore b/.gitignore index 0666267..93059ed 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,8 @@ build/ +bin/ run/ .idea/ .c* .gradle/ gradle/ -.architectury-transformer/ \ No newline at end of file +.architectury-transformer/ diff --git a/common/src/main/java/io/lampnet/betterlodestones/CompassDataHandler.java b/common/src/main/java/io/lampnet/betterlodestones/CompassDataHandler.java index 392160c..9387d66 100644 --- a/common/src/main/java/io/lampnet/betterlodestones/CompassDataHandler.java +++ b/common/src/main/java/io/lampnet/betterlodestones/CompassDataHandler.java @@ -3,18 +3,11 @@ package io.lampnet.betterlodestones; import io.lampnet.betterlodestones.component.BetterLodestonesComponents; import net.minecraft.core.BlockPos; import net.minecraft.core.GlobalPos; -import net.minecraft.core.registries.Registries; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.nbt.ListTag; -import net.minecraft.nbt.NbtOps; -import net.minecraft.nbt.Tag; -import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.core.component.DataComponents; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.CompassItem; import net.minecraft.world.item.ItemStack; -import net.minecraft.core.component.DataComponents; -import net.minecraft.world.item.enchantment.EnchantmentHelper; +import net.minecraft.world.item.component.LodestoneTracker; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Blocks; @@ -26,26 +19,30 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Consumer; public class CompassDataHandler { - private static final String LODESTONES_KEY = "BetterLodestones"; - private static final String CURRENT_INDEX_KEY = "CurrentLodestoneIndex"; - private static final String POS_X_KEY = "PosX"; - private static final String POS_Y_KEY = "PosY"; - private static final String POS_Z_KEY = "PosZ"; - private static final String DIMENSION_KEY = "Dimension"; - private static final String BROKEN_LODESTONE_FLAG = "BrokenLodestone"; - public static List getLodestones(ItemStack compass) { - return compass.get(BetterLodestonesComponents.LODESTONES); + List lodestones = compass.get(BetterLodestonesComponents.LODESTONES.get()); + return lodestones != null ? lodestones : Collections.emptyList(); + } + + public static void syncVanillaLodestoneTracker(ItemStack compass) { + Optional currentLodestone = getCurrentLodestone(compass); + if (currentLodestone.isPresent()) { + boolean tracked = !hasBrokenLodestone(compass); + compass.set(DataComponents.LODESTONE_TRACKER, new LodestoneTracker(currentLodestone, tracked)); + } else { + compass.remove(DataComponents.LODESTONE_TRACKER); + } } public static void addLodestone(ItemStack compass, GlobalPos lodestone) { List lodestones = new ArrayList<>(getLodestones(compass)); if (!lodestones.contains(lodestone)) { lodestones.add(lodestone); - compass.set(BetterLodestonesComponents.LODESTONES, lodestones); + compass.set(BetterLodestonesComponents.LODESTONES.get(), lodestones); if (lodestones.size() == 1) { - compass.set(BetterLodestonesComponents.CURRENT_LODESTONE_INDEX, 0); + compass.set(BetterLodestonesComponents.CURRENT_LODESTONE_INDEX.get(), 0); } + syncVanillaLodestoneTracker(compass); } } @@ -54,20 +51,21 @@ public class CompassDataHandler { int currentIndex = getCurrentLodestoneIndex(compass); if (lodestones.remove(lodestone)) { if (lodestones.isEmpty()) { - compass.remove(BetterLodestonesComponents.LODESTONES); - compass.remove(BetterLodestonesComponents.CURRENT_LODESTONE_INDEX); + compass.remove(BetterLodestonesComponents.LODESTONES.get()); + compass.remove(BetterLodestonesComponents.CURRENT_LODESTONE_INDEX.get()); } else { if (currentIndex >= lodestones.size()) { currentIndex = lodestones.size() - 1; } - compass.set(BetterLodestonesComponents.LODESTONES, lodestones); - compass.set(BetterLodestonesComponents.CURRENT_LODESTONE_INDEX, Math.max(0, currentIndex)); + compass.set(BetterLodestonesComponents.LODESTONES.get(), lodestones); + compass.set(BetterLodestonesComponents.CURRENT_LODESTONE_INDEX.get(), Math.max(0, currentIndex)); } + syncVanillaLodestoneTracker(compass); } } public static int getCurrentLodestoneIndex(ItemStack compass) { - return compass.getOrDefault(BetterLodestonesComponents.CURRENT_LODESTONE_INDEX, 0); + return compass.getOrDefault(BetterLodestonesComponents.CURRENT_LODESTONE_INDEX.get(), 0); } public static Optional getCurrentLodestone(ItemStack compass) { @@ -90,7 +88,7 @@ public class CompassDataHandler { } int currentIndex = getCurrentLodestoneIndex(compass); int nextIndex = (currentIndex + 1) % lodestones.size(); - compass.set(BetterLodestonesComponents.CURRENT_LODESTONE_INDEX, nextIndex); + compass.set(BetterLodestonesComponents.CURRENT_LODESTONE_INDEX.get(), nextIndex); GlobalPos newLodestone = lodestones.get(nextIndex); if (isLodestoneValid(level, newLodestone)) { @@ -107,9 +105,10 @@ public class CompassDataHandler { } public static void clearAllLodestones(ItemStack compass) { - compass.remove(BetterLodestonesComponents.LODESTONES); - compass.remove(BetterLodestonesComponents.CURRENT_LODESTONE_INDEX); - compass.remove(BetterLodestonesComponents.BROKEN_LODESTONE); + compass.remove(BetterLodestonesComponents.LODESTONES.get()); + compass.remove(BetterLodestonesComponents.CURRENT_LODESTONE_INDEX.get()); + compass.remove(BetterLodestonesComponents.BROKEN_LODESTONE.get()); + syncVanillaLodestoneTracker(compass); } public static void removeCurrentLodestone(ItemStack compass) { @@ -187,15 +186,17 @@ public class CompassDataHandler { } public static void markLodestoneAsBroken(ItemStack compass) { - compass.set(BetterLodestonesComponents.BROKEN_LODESTONE, true); + compass.set(BetterLodestonesComponents.BROKEN_LODESTONE.get(), true); + syncVanillaLodestoneTracker(compass); } public static boolean hasBrokenLodestone(ItemStack compass) { - return compass.getOrDefault(BetterLodestonesComponents.BROKEN_LODESTONE, false); + return compass.getOrDefault(BetterLodestonesComponents.BROKEN_LODESTONE.get(), false); } public static void clearBrokenLodestoneFlag(ItemStack compass) { - compass.remove(BetterLodestonesComponents.BROKEN_LODESTONE); + compass.remove(BetterLodestonesComponents.BROKEN_LODESTONE.get()); + syncVanillaLodestoneTracker(compass); } public static void onLodestoneRemoved(Level level, BlockPos removedPos) { @@ -250,18 +251,6 @@ public class CompassDataHandler { } } - private static boolean isSameLodestone(CompoundTag tag, GlobalPos lodestone) { - int x = tag.getInt("PosX"); - int y = tag.getInt("PosY"); - int z = tag.getInt("PosZ"); - String dimension = tag.getString("Dimension"); - - return x == lodestone.pos().getX() && - y == lodestone.pos().getY() && - z == lodestone.pos().getZ() && - dimension.equals(lodestone.dimension().location().toString()); - } - public static boolean convertVanillaLodestoneCompass(ItemStack compass) { if (compass == null || !(compass.getItem() instanceof CompassItem)) { return false; @@ -274,7 +263,6 @@ public class CompassDataHandler { lodestoneTarget.target().ifPresent(globalPos -> { addLodestone(compass, globalPos); - compass.remove(DataComponents.LODESTONE_TRACKER); }); return true; diff --git a/common/src/main/java/io/lampnet/betterlodestones/client/BetterLodestonesClient.java b/common/src/main/java/io/lampnet/betterlodestones/client/BetterLodestonesClient.java new file mode 100644 index 0000000..369111d --- /dev/null +++ b/common/src/main/java/io/lampnet/betterlodestones/client/BetterLodestonesClient.java @@ -0,0 +1,6 @@ +package io.lampnet.betterlodestones.client; + +public class BetterLodestonesClient { + public static void initClient() { + } +} diff --git a/common/src/main/java/io/lampnet/betterlodestones/component/BetterLodestonesComponents.java b/common/src/main/java/io/lampnet/betterlodestones/component/BetterLodestonesComponents.java index 4ab1013..674119d 100644 --- a/common/src/main/java/io/lampnet/betterlodestones/component/BetterLodestonesComponents.java +++ b/common/src/main/java/io/lampnet/betterlodestones/component/BetterLodestonesComponents.java @@ -1,30 +1,34 @@ package io.lampnet.betterlodestones.component; import com.mojang.serialization.Codec; +import dev.architectury.registry.registries.DeferredRegister; +import dev.architectury.registry.registries.RegistrySupplier; import io.lampnet.betterlodestones.BetterLodestones; import net.minecraft.core.GlobalPos; -import net.minecraft.core.Registry; import net.minecraft.core.component.DataComponentType; -import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.resources.ResourceLocation; +import net.minecraft.core.registries.Registries; import java.util.List; import java.util.function.UnaryOperator; public class BetterLodestonesComponents { - public static final DataComponentType> LODESTONES = register("lodestones", builder -> builder.persistent(Codec.list(GlobalPos.CODEC)).cacheEncoding()); - public static final DataComponentType CURRENT_LODESTONE_INDEX = register("current_lodestone_index", builder -> builder.persistent(Codec.INT).cacheEncoding()); - public static final DataComponentType BROKEN_LODESTONE = register("broken_lodestone", builder -> builder.persistent(Codec.BOOL).cacheEncoding()); + public static final DeferredRegister> DATA_COMPONENTS = + DeferredRegister.create(BetterLodestones.MOD_ID, Registries.DATA_COMPONENT_TYPE); - private static DataComponentType register(String name, UnaryOperator> builder) { - return Registry.register( - BuiltInRegistries.DATA_COMPONENT_TYPE, - ResourceLocation.fromNamespaceAndPath(BetterLodestones.MOD_ID, name), - builder.apply(DataComponentType.builder()).build() - ); + public static final RegistrySupplier>> LODESTONES = + register("lodestones", builder -> builder.persistent(Codec.list(GlobalPos.CODEC)).cacheEncoding()); + + public static final RegistrySupplier> CURRENT_LODESTONE_INDEX = + register("current_lodestone_index", builder -> builder.persistent(Codec.INT).cacheEncoding()); + + public static final RegistrySupplier> BROKEN_LODESTONE = + register("broken_lodestone", builder -> builder.persistent(Codec.BOOL).cacheEncoding()); + + private static RegistrySupplier> register(String name, UnaryOperator> builder) { + return DATA_COMPONENTS.register(name, () -> builder.apply(DataComponentType.builder()).build()); } public static void init() { - // This method is called to ensure the components are registered + DATA_COMPONENTS.register(); } } diff --git a/common/src/main/java/io/lampnet/betterlodestones/mixin/CompassItemMixin.java b/common/src/main/java/io/lampnet/betterlodestones/mixin/CompassItemMixin.java index 56a0004..9798ad8 100644 --- a/common/src/main/java/io/lampnet/betterlodestones/mixin/CompassItemMixin.java +++ b/common/src/main/java/io/lampnet/betterlodestones/mixin/CompassItemMixin.java @@ -1,6 +1,7 @@ package io.lampnet.betterlodestones.mixin; import io.lampnet.betterlodestones.CompassDataHandler; +import io.lampnet.betterlodestones.advancement.DimensionalCompassBindingTrigger; import io.lampnet.betterlodestones.config.ConfigManager; import io.lampnet.betterlodestones.registry.BetterLodestonesRegistry; import net.minecraft.core.BlockPos; @@ -72,7 +73,7 @@ public class CompassItemMixin { level.playSound(null, pos, SoundEvents.LODESTONE_COMPASS_LOCK, SoundSource.PLAYERS, 1.0F, 1.0F); if (player instanceof ServerPlayer serverPlayer) { - BetterLodestonesRegistry.DIMENSIONAL_COMPASS_BINDING.trigger(serverPlayer, compass); + ((DimensionalCompassBindingTrigger) BetterLodestonesRegistry.DIMENSIONAL_COMPASS_BINDING.get()).trigger(serverPlayer, compass); } if (player != null) { diff --git a/common/src/main/java/io/lampnet/betterlodestones/mixin/CompassItemMixinPointing.java b/common/src/main/java/io/lampnet/betterlodestones/mixin/CompassItemMixinPointing.java deleted file mode 100644 index 0e3c96c..0000000 --- a/common/src/main/java/io/lampnet/betterlodestones/mixin/CompassItemMixinPointing.java +++ /dev/null @@ -1,38 +0,0 @@ -package io.lampnet.betterlodestones.mixin; - -import io.lampnet.betterlodestones.CompassDataHandler; -import io.lampnet.betterlodestones.component.BetterLodestonesComponents; -import net.minecraft.core.GlobalPos; -import net.minecraft.core.component.DataComponentType; -import net.minecraft.core.component.DataComponents; -import net.minecraft.world.item.CompassItem; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.component.LodestoneTracker; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; -import org.spongepowered.asm.mixin.injection.Slice; - -import java.util.Optional; - -@Mixin(CompassItem.class) -public class CompassItemMixinPointing { - @Redirect(method = "", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/item/ItemStack;has(Lnet/minecraft/core/component/DataComponentType;)Z"), - slice = @Slice(from = @At(value = "CONSTANT", args = "stringValue=angle"), to = @At(value = "CONSTANT", args = "stringValue=lodestone_angle"))) - private static boolean hasCustomLodestone(ItemStack itemStack, DataComponentType dataComponentType) { - if (dataComponentType == DataComponents.LODESTONE_TRACKER) { - return itemStack.has(DataComponents.LODESTONE_TRACKER) || itemStack.has(BetterLodestonesComponents.LODESTONES); - } - return itemStack.has(dataComponentType); - } - - @Redirect(method = "", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/item/ItemStack;get(Lnet/minecraft/core/component/DataComponentType;)Ljava/lang/Object;"), - slice = @Slice(from = @At(value = "CONSTANT", args = "stringValue=lodestone_angle"))) - private static Object getCustomLodestoneTarget(ItemStack itemStack, DataComponentType dataComponentType) { - if (dataComponentType == DataComponents.LODESTONE_TRACKER && itemStack.has(BetterLodestonesComponents.LODESTONES)) { - Optional current = CompassDataHandler.getCurrentLodestone(itemStack); - return current.map(globalPos -> new LodestoneTracker(Optional.of(globalPos), true)).orElse(null); - } - return itemStack.get(dataComponentType); - } -} diff --git a/common/src/main/java/io/lampnet/betterlodestones/recipe/CompassUnbindingRecipe.java b/common/src/main/java/io/lampnet/betterlodestones/recipe/CompassUnbindingRecipe.java index 443c87f..24628db 100644 --- a/common/src/main/java/io/lampnet/betterlodestones/recipe/CompassUnbindingRecipe.java +++ b/common/src/main/java/io/lampnet/betterlodestones/recipe/CompassUnbindingRecipe.java @@ -1,18 +1,12 @@ package io.lampnet.betterlodestones.recipe; -import com.google.gson.JsonObject; -import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; import io.lampnet.betterlodestones.CompassDataHandler; import io.lampnet.betterlodestones.component.BetterLodestonesComponents; import net.minecraft.core.HolderLookup; -import net.minecraft.core.RegistryAccess; -import net.minecraft.nbt.CompoundTag; import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.codec.StreamCodec; -import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.crafting.CraftingInput; -import net.minecraft.world.inventory.CraftingContainer; import net.minecraft.world.item.CompassItem; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; @@ -45,7 +39,7 @@ public class CompassUnbindingRecipe extends CustomRecipe { } } - return !compass.isEmpty() && (compass.has(BetterLodestonesComponents.LODESTONES) || compass.has(net.minecraft.core.component.DataComponents.LODESTONE_TRACKER)); + return !compass.isEmpty() && (compass.has(BetterLodestonesComponents.LODESTONES.get()) || compass.has(net.minecraft.core.component.DataComponents.LODESTONE_TRACKER)); } @Override @@ -82,12 +76,12 @@ public class CompassUnbindingRecipe extends CustomRecipe { @Override public @NotNull RecipeSerializer getSerializer() { - return CompassUnbindingRecipeSerializer.INSTANCE; + return io.lampnet.betterlodestones.registry.BetterLodestonesRegistry.COMPASS_UNBINDING.get(); } public static class CompassUnbindingRecipeSerializer implements RecipeSerializer { public static final CompassUnbindingRecipeSerializer INSTANCE = new CompassUnbindingRecipeSerializer(); - private static final Codec CODEC = RecordCodecBuilder.create(instance -> + private static final com.mojang.serialization.MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( CraftingBookCategory.CODEC.fieldOf("category").orElse(CraftingBookCategory.MISC).forGetter(CustomRecipe::category) ).apply(instance, CompassUnbindingRecipe::new) @@ -99,7 +93,7 @@ public class CompassUnbindingRecipe extends CustomRecipe { @Override public @NotNull com.mojang.serialization.MapCodec codec() { - return CODEC.fieldOf("recipe"); + return CODEC; } @Override diff --git a/common/src/main/java/io/lampnet/betterlodestones/recipe/ConfigurableLodestoneRecipe.java b/common/src/main/java/io/lampnet/betterlodestones/recipe/ConfigurableLodestoneRecipe.java index 4b901cc..55f4cc1 100644 --- a/common/src/main/java/io/lampnet/betterlodestones/recipe/ConfigurableLodestoneRecipe.java +++ b/common/src/main/java/io/lampnet/betterlodestones/recipe/ConfigurableLodestoneRecipe.java @@ -1,14 +1,10 @@ package io.lampnet.betterlodestones.recipe; -import com.google.gson.JsonObject; -import com.mojang.serialization.Codec; import com.mojang.serialization.codecs.RecordCodecBuilder; import io.lampnet.betterlodestones.config.ConfigManager; import net.minecraft.core.HolderLookup; -import net.minecraft.core.RegistryAccess; import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.codec.StreamCodec; -import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.crafting.CraftingInput; import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; @@ -58,12 +54,12 @@ public class ConfigurableLodestoneRecipe extends CustomRecipe { @Override public @NotNull RecipeSerializer getSerializer() { - return Serializer.INSTANCE; + return io.lampnet.betterlodestones.registry.BetterLodestonesRegistry.CONFIGURABLE_LODESTONE.get(); } public static class Serializer implements RecipeSerializer { public static final Serializer INSTANCE = new Serializer(); - private static final Codec CODEC = RecordCodecBuilder.create(instance -> + private static final com.mojang.serialization.MapCodec CODEC = RecordCodecBuilder.mapCodec(instance -> instance.group( CraftingBookCategory.CODEC.fieldOf("category").orElse(CraftingBookCategory.MISC).forGetter(CustomRecipe::category) ).apply(instance, ConfigurableLodestoneRecipe::new) @@ -75,7 +71,7 @@ public class ConfigurableLodestoneRecipe extends CustomRecipe { @Override public @NotNull com.mojang.serialization.MapCodec codec() { - return CODEC.fieldOf("recipe"); + return CODEC; } @Override diff --git a/common/src/main/java/io/lampnet/betterlodestones/registry/BetterLodestonesRegistry.java b/common/src/main/java/io/lampnet/betterlodestones/registry/BetterLodestonesRegistry.java index b9e17e1..0b4b5be 100644 --- a/common/src/main/java/io/lampnet/betterlodestones/registry/BetterLodestonesRegistry.java +++ b/common/src/main/java/io/lampnet/betterlodestones/registry/BetterLodestonesRegistry.java @@ -6,7 +6,7 @@ import io.lampnet.betterlodestones.BetterLodestones; import io.lampnet.betterlodestones.advancement.DimensionalCompassBindingTrigger; import io.lampnet.betterlodestones.recipe.CompassUnbindingRecipe; import io.lampnet.betterlodestones.recipe.ConfigurableLodestoneRecipe; -import net.minecraft.advancements.CriteriaTriggers; +import net.minecraft.advancements.CriterionTrigger; import net.minecraft.core.registries.Registries; import net.minecraft.world.item.crafting.RecipeSerializer; @@ -20,10 +20,14 @@ public final class BetterLodestonesRegistry { public static final RegistrySupplier> COMPASS_UNBINDING = RECIPE_SERIALIZERS.register("compass_unbinding", () -> CompassUnbindingRecipe.CompassUnbindingRecipeSerializer.INSTANCE); - public static final DimensionalCompassBindingTrigger DIMENSIONAL_COMPASS_BINDING = - CriteriaTriggers.register("dimensional_compass_binding", new DimensionalCompassBindingTrigger()); + public static final DeferredRegister> CRITERION_TRIGGERS = + DeferredRegister.create(BetterLodestones.MOD_ID, Registries.TRIGGER_TYPE); + + public static final RegistrySupplier> DIMENSIONAL_COMPASS_BINDING = + CRITERION_TRIGGERS.register("dimensional_compass_binding", DimensionalCompassBindingTrigger::new); public static void init() { RECIPE_SERIALIZERS.register(); + CRITERION_TRIGGERS.register(); } } diff --git a/common/src/main/resources/better_lodestones.mixins.json b/common/src/main/resources/better_lodestones.mixins.json index 7cd059e..896d85f 100644 --- a/common/src/main/resources/better_lodestones.mixins.json +++ b/common/src/main/resources/better_lodestones.mixins.json @@ -7,7 +7,6 @@ ], "mixins": [ "CompassItemMixin", - "CompassItemMixinPointing", "CompassTooltipMixin", "InventoryInteractionMixin", "ItemPickupMixin", diff --git a/common/src/main/resources/data/betterlodestones/advancements/adventure/dimensional_lodestone_master.json b/common/src/main/resources/data/betterlodestones/advancements/adventure/dimensional_lodestone_master.json index c561576..7489417 100644 --- a/common/src/main/resources/data/betterlodestones/advancements/adventure/dimensional_lodestone_master.json +++ b/common/src/main/resources/data/betterlodestones/advancements/adventure/dimensional_lodestone_master.json @@ -1,9 +1,11 @@ { - "parent": "minecraft:nether/use_lodestone", + "parent": "minecraft:adventure/use_lodestone", "display": { "icon": { - "item": "minecraft:compass", - "nbt": "{CustomModelData:1}" + "id": "minecraft:compass", + "components": { + "minecraft:custom_model_data": 1 + } }, "title": { "translate": "advancements.better_lodestones.dimensional_lodestone_master.title" diff --git a/common/src/main/resources/data/betterlodestones/recipes/compass_unbinding.json b/common/src/main/resources/data/betterlodestones/recipes/compass_unbinding.json index 03b07d5..1660f47 100644 --- a/common/src/main/resources/data/betterlodestones/recipes/compass_unbinding.json +++ b/common/src/main/resources/data/betterlodestones/recipes/compass_unbinding.json @@ -1,3 +1,4 @@ { - "type": "better_lodestones:compass_unbinding" + "type": "better_lodestones:compass_unbinding", + "category": "misc" } diff --git a/common/src/main/resources/data/betterlodestones/recipes/configurable_lodestone.json b/common/src/main/resources/data/betterlodestones/recipes/configurable_lodestone.json index 9f0196c..1c5f4a8 100644 --- a/common/src/main/resources/data/betterlodestones/recipes/configurable_lodestone.json +++ b/common/src/main/resources/data/betterlodestones/recipes/configurable_lodestone.json @@ -1,3 +1,4 @@ { - "type": "better_lodestones:configurable_lodestone" + "type": "better_lodestones:configurable_lodestone", + "category": "building" } diff --git a/common/src/main/resources/data/minecraft/advancements/nether/use_lodestone.json b/common/src/main/resources/data/minecraft/advancements/adventure/use_lodestone.json similarity index 67% rename from common/src/main/resources/data/minecraft/advancements/nether/use_lodestone.json rename to common/src/main/resources/data/minecraft/advancements/adventure/use_lodestone.json index cf8a3e8..8c9753e 100644 --- a/common/src/main/resources/data/minecraft/advancements/nether/use_lodestone.json +++ b/common/src/main/resources/data/minecraft/advancements/adventure/use_lodestone.json @@ -2,7 +2,7 @@ "parent": "minecraft:adventure/root", "display": { "icon": { - "item": "minecraft:lodestone" + "id": "minecraft:lodestone" }, "title": { "translate": "advancements.nether.use_lodestone.title" @@ -19,22 +19,16 @@ "use_lodestone": { "trigger": "minecraft:item_used_on_block", "conditions": { - "location": [ - { - "condition": "minecraft:match_tool", - "predicate": { - "items": [ - "minecraft:compass" - ] - } - } - ], "item": { "items": [ "minecraft:compass" ] }, - "block": "minecraft:lodestone" + "location": { + "block": { + "blocks": "minecraft:lodestone" + } + } } } } diff --git a/common/src/main/resources/data/minecraft/recipes/lodestone.json b/common/src/main/resources/data/minecraft/recipes/lodestone.json index 9f0196c..1c5f4a8 100644 --- a/common/src/main/resources/data/minecraft/recipes/lodestone.json +++ b/common/src/main/resources/data/minecraft/recipes/lodestone.json @@ -1,3 +1,4 @@ { - "type": "better_lodestones:configurable_lodestone" + "type": "better_lodestones:configurable_lodestone", + "category": "building" } diff --git a/fabric/src/main/java/io/lampnet/betterlodestones/fabric/BetterLodestonesFabricClient.java b/fabric/src/main/java/io/lampnet/betterlodestones/fabric/BetterLodestonesFabricClient.java new file mode 100644 index 0000000..f025f2e --- /dev/null +++ b/fabric/src/main/java/io/lampnet/betterlodestones/fabric/BetterLodestonesFabricClient.java @@ -0,0 +1,11 @@ +package io.lampnet.betterlodestones.fabric; + +import io.lampnet.betterlodestones.client.BetterLodestonesClient; +import net.fabricmc.api.ClientModInitializer; + +public final class BetterLodestonesFabricClient implements ClientModInitializer { + @Override + public void onInitializeClient() { + BetterLodestonesClient.initClient(); + } +} diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index c5fc90a..8dea563 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -16,6 +16,9 @@ "entrypoints": { "main": [ "io.lampnet.betterlodestones.fabric.BetterLodestonesFabric" + ], + "client": [ + "io.lampnet.betterlodestones.fabric.BetterLodestonesFabricClient" ] }, "mixins": [ diff --git a/neoforge/src/main/java/io/lampnet/betterlodestones/neoforge/BetterLodestonesNeoForgeClient.java b/neoforge/src/main/java/io/lampnet/betterlodestones/neoforge/BetterLodestonesNeoForgeClient.java new file mode 100644 index 0000000..f105fa3 --- /dev/null +++ b/neoforge/src/main/java/io/lampnet/betterlodestones/neoforge/BetterLodestonesNeoForgeClient.java @@ -0,0 +1,17 @@ +package io.lampnet.betterlodestones.neoforge; + +import io.lampnet.betterlodestones.BetterLodestones; +import io.lampnet.betterlodestones.client.BetterLodestonesClient; +import net.neoforged.api.distmarker.Dist; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent; + +@EventBusSubscriber(modid = BetterLodestones.MOD_ID, value = Dist.CLIENT) +public class BetterLodestonesNeoForgeClient { + + @SubscribeEvent + public static void onClientSetup(FMLClientSetupEvent event) { + event.enqueueWork(BetterLodestonesClient::initClient); + } +}