diff --git a/src/main/java/cam72cam/mod/ModCore.java b/src/main/java/cam72cam/mod/ModCore.java index d507376ab..f7c868539 100644 --- a/src/main/java/cam72cam/mod/ModCore.java +++ b/src/main/java/cam72cam/mod/ModCore.java @@ -19,10 +19,7 @@ import cam72cam.mod.entity.ModdedEntity; import cam72cam.mod.entity.sync.EntitySync; import cam72cam.mod.event.ClientEvents; -import cam72cam.mod.event.CommonEvents; import cam72cam.mod.input.Mouse; -import cam72cam.mod.item.Fuzzy; -import cam72cam.mod.item.Recipes; import cam72cam.mod.net.Packet; import cam72cam.mod.net.PacketDirection; import cam72cam.mod.render.Light; @@ -38,7 +35,6 @@ import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import net.minecraftforge.fml.event.lifecycle.FMLLoadCompleteEvent; -import net.minecraftforge.fml.event.lifecycle.GatherDataEvent; import net.minecraftforge.fml.event.lifecycle.InterModEnqueueEvent; import net.minecraftforge.fml.event.server.FMLServerStartedEvent; import net.minecraftforge.fml.event.server.FMLServerStartingEvent; @@ -483,12 +479,6 @@ public void serverEvent(ModEvent event) { } } - public static void genData(String MODID, GatherDataEvent event) { - CommonEvents.Recipe.REGISTER.execute(Runnable::run); - event.getGenerator().addProvider(new Recipes(event.getGenerator())); - Fuzzy.register(event.getGenerator()); - } - public static void debug(String msg, Object... params) { if (Config.DebugLogging) { if (instance == null || instance.logger == null) { diff --git a/src/main/java/cam72cam/mod/UMCMixinPlugin.java b/src/main/java/cam72cam/mod/UMCMixinPlugin.java index 0643ca5ba..24225b7bc 100644 --- a/src/main/java/cam72cam/mod/UMCMixinPlugin.java +++ b/src/main/java/cam72cam/mod/UMCMixinPlugin.java @@ -1,6 +1,5 @@ package cam72cam.mod; -import com.llamalad7.mixinextras.MixinExtrasBootstrap; import cpw.mods.modlauncher.api.IEnvironment; import cpw.mods.modlauncher.api.ITransformationService; import cpw.mods.modlauncher.api.ITransformer; diff --git a/src/main/java/cam72cam/mod/event/CommonEvents.java b/src/main/java/cam72cam/mod/event/CommonEvents.java index 62f114d28..7d335ccca 100644 --- a/src/main/java/cam72cam/mod/event/CommonEvents.java +++ b/src/main/java/cam72cam/mod/event/CommonEvents.java @@ -1,6 +1,10 @@ package cam72cam.mod.event; import cam72cam.mod.ModCore; +import cam72cam.mod.event.platform.RegisterAdvancementEvent; +import cam72cam.mod.event.platform.RegisterBlockTagEvent; +import cam72cam.mod.event.platform.RegisterCraftingRecipeEvent; +import cam72cam.mod.event.platform.RegisterItemTagEvent; import net.minecraft.entity.EntityType; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.inventory.container.ContainerType; @@ -20,6 +24,8 @@ import net.minecraftforge.registries.IForgeRegistry; import net.minecraft.world.server.ServerWorld; +import java.util.ArrayList; +import java.util.List; import java.util.function.Consumer; /** Registry of events that fire off on both client and server. Do not use directly! */ @@ -41,6 +47,7 @@ public static final class World { public static final class Block { public static final Event REGISTER = new Event<>(); public static final Event BROKEN = new Event<>(); + public static final Event> TAGS = new Event<>(); } public static final class Tile { @@ -49,10 +56,13 @@ public static final class Tile { public static final class Item { public static final Event REGISTER = new Event<>(); + public static final Event> TAGS = new Event<>(); } public static final class Recipe { - public static final Event REGISTER = new Event<>(); + public static final Event> REGISTER = new Event<>(); + //TODO make event listener refreshable + public static ThreadLocal>> RECIPE_LISTENER = ThreadLocal.withInitial(ArrayList::new); } public static final class Entity { @@ -157,5 +167,26 @@ public static void registerEntities(RegistryEvent.Register> event) public static void registerContainers(RegistryEvent.Register> event) { CONTAINER_REGISTRY.execute(x -> x.accept(event.getRegistry())); } + + @SubscribeEvent + public static void registerItemTag(RegisterBlockTagEvent event) { + Block.TAGS.execute(x -> x.accept(event)); + } + + @SubscribeEvent + public static void registerItemTag(RegisterItemTagEvent event) { + Item.TAGS.execute(x -> x.accept(event)); + } + + @SubscribeEvent + public static void registerCraftingRecipe(RegisterCraftingRecipeEvent event) { + CommonEvents.Recipe.REGISTER.execute(x -> x.accept(event)); + } + + @SubscribeEvent + public static void registerRecipeTrigger(RegisterAdvancementEvent event) { + CommonEvents.Recipe.RECIPE_LISTENER.get().forEach(x -> x.accept(event)); + CommonEvents.Recipe.RECIPE_LISTENER.set(new ArrayList<>()); + } } } diff --git a/src/main/java/cam72cam/mod/event/platform/RegisterAdvancementEvent.java b/src/main/java/cam72cam/mod/event/platform/RegisterAdvancementEvent.java new file mode 100644 index 000000000..99be08118 --- /dev/null +++ b/src/main/java/cam72cam/mod/event/platform/RegisterAdvancementEvent.java @@ -0,0 +1,38 @@ +package cam72cam.mod.event.platform; + +import cam72cam.mod.item.Fuzzy; +import net.minecraft.advancements.Advancement; +import net.minecraft.advancements.AdvancementRewards; +import net.minecraft.advancements.Criterion; +import net.minecraft.advancements.criterion.*; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.eventbus.api.Event; + +import java.util.Map; + +public class RegisterAdvancementEvent extends Event { + private static final ResourceLocation RECIPE = new ResourceLocation("minecraft:recipes/root"); + private final Map map; + + public RegisterAdvancementEvent(Map map) { + this.map = map; + } + + public void registerRecipeTrigger(ResourceLocation ident, ResourceLocation recipe, Fuzzy... trigger) { + Advancement.Builder builder = Advancement.Builder.builder().withParentId(RECIPE); + +// Criterion hasRecipe = new Criterion(new RecipeUnlockedTrigger.Instance(recipe)); +// builder.withCriterion("has_recipe", hasRecipe); + for (int i = 0; i < trigger.length; i++) { + Fuzzy ingredient = trigger[i]; + if (ingredient == null || ingredient.getTag() == null) continue; + + Criterion hasItem = new Criterion(InventoryChangeTrigger.Instance.forItems( + ItemPredicate.Builder.create().tag(ingredient.getTag()).build())); + builder.withCriterion("has" + ingredient + i, hasItem); + } + builder.withRewards(AdvancementRewards.Builder.recipe(recipe)); + + map.put(ident, builder); + } +} diff --git a/src/main/java/cam72cam/mod/event/platform/RegisterBlockTagEvent.java b/src/main/java/cam72cam/mod/event/platform/RegisterBlockTagEvent.java new file mode 100644 index 000000000..1e54d51cb --- /dev/null +++ b/src/main/java/cam72cam/mod/event/platform/RegisterBlockTagEvent.java @@ -0,0 +1,35 @@ +package cam72cam.mod.event.platform; + +import net.minecraft.block.Block; +import net.minecraft.tags.Tag; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.eventbus.api.Event; + +import java.util.Collection; +import java.util.Map; + +public class RegisterBlockTagEvent extends Event { + private final Map> map; + + public RegisterBlockTagEvent(Map> map) { + this.map = map; + } + + public void registerTag(ResourceLocation ident, Collection includes) { + for (Block include : includes) { + registerTag(ident, include); + } + } + + public void registerTag(ResourceLocation ident, Block block) { + Tag.Builder builder = (Tag.Builder) map.getOrDefault(ident, Tag.Builder.create()); + builder.add(block); + map.put(ident, builder); + } + + public void registerTag(ResourceLocation ident, Tag includes) { + Tag.Builder builder = (Tag.Builder) map.getOrDefault(ident, Tag.Builder.create()); + includes.getEntries().forEach(builder::add); + map.put(ident, builder); + } +} diff --git a/src/main/java/cam72cam/mod/event/platform/RegisterCraftingRecipeEvent.java b/src/main/java/cam72cam/mod/event/platform/RegisterCraftingRecipeEvent.java new file mode 100644 index 000000000..5ff67fc93 --- /dev/null +++ b/src/main/java/cam72cam/mod/event/platform/RegisterCraftingRecipeEvent.java @@ -0,0 +1,60 @@ +package cam72cam.mod.event.platform; + +import cam72cam.mod.ModCore; +import cam72cam.mod.event.CommonEvents; +import cam72cam.mod.item.Fuzzy; +import cam72cam.mod.item.ItemStack; +import com.google.common.collect.ImmutableMap; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.item.crafting.IRecipeType; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.item.crafting.ShapedRecipe; +import net.minecraft.util.NonNullList; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.eventbus.api.Event; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Stream; + +//Only support full height recipe for now +public class RegisterCraftingRecipeEvent extends Event { + Map, ImmutableMap.Builder>> map; + + public RegisterCraftingRecipeEvent(Map, ImmutableMap.Builder>> map) { + this.map = map; + } + + public void register(ItemStack target, int width, List ingredients, List dependencies, List conflicts) { + ResourceLocation itemName = target.internal.getItem().getRegistryName(); + ResourceLocation name = new ResourceLocation(itemName.getNamespace(), itemName.getPath() + + ingredients.hashCode() + dependencies.hashCode() + conflicts.hashCode()); + boolean dependencyNotMet = dependencies.stream().anyMatch(f -> f.getTag().getAllElements().isEmpty()); + boolean hasConflict = conflicts.stream().anyMatch(f -> !f.getTag().getAllElements().isEmpty()); + + if (dependencyNotMet || hasConflict) { + ModCore.info("Requirements not met, skipping UMC recipe %s", name.toString()); + return; + } + + List n = new ArrayList<>(); + for (Fuzzy ingredient : ingredients) { + if (ingredient == null || ingredient.isEmpty()) { + n.add(new Ingredient(Stream.of(new Ingredient.SingleItemList(net.minecraft.item.ItemStack.EMPTY)))); + } else { + n.add(new Ingredient(Stream.of(new Ingredient.TagList(ingredient.getTag())))); + } + } + NonNullList ingredient = NonNullList.create(); + ingredient.addAll(n); + + ShapedRecipe recipe = new ShapedRecipe(name, "", width, 3, ingredient, target.internal); + + CommonEvents.Recipe.RECIPE_LISTENER.get().add(event -> { + ResourceLocation ad = new ResourceLocation(name.getNamespace(), "unlock" + name.getPath()); + event.registerRecipeTrigger(ad, name, ingredients.toArray(new Fuzzy[0])); + }); + map.computeIfAbsent(IRecipeType.CRAFTING, o -> ImmutableMap.builder()).put(name, recipe); + } +} diff --git a/src/main/java/cam72cam/mod/event/platform/RegisterItemTagEvent.java b/src/main/java/cam72cam/mod/event/platform/RegisterItemTagEvent.java new file mode 100644 index 000000000..1ac727000 --- /dev/null +++ b/src/main/java/cam72cam/mod/event/platform/RegisterItemTagEvent.java @@ -0,0 +1,35 @@ +package cam72cam.mod.event.platform; + +import net.minecraft.item.Item; +import net.minecraft.tags.Tag; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.eventbus.api.Event; + +import java.util.Collection; +import java.util.Map; + +public class RegisterItemTagEvent extends Event { + private final Map> map; + + public RegisterItemTagEvent(Map> map) { + this.map = map; + } + + public void registerTag(ResourceLocation ident, Collection includes) { + for (Item include : includes) { + registerTag(ident, include); + } + } + + public void registerTag(ResourceLocation ident, Item item) { + Tag.Builder builder = (Tag.Builder) map.getOrDefault(ident, Tag.Builder.create()); + builder.add(item); + map.put(ident, builder); + } + + public void registerTag(ResourceLocation ident, Tag includes) { + Tag.Builder builder = (Tag.Builder) map.getOrDefault(ident, Tag.Builder.create()); + includes.getEntries().forEach(builder::add); + map.put(ident, builder); + } +} diff --git a/src/main/java/cam72cam/mod/item/Fuzzy.java b/src/main/java/cam72cam/mod/item/Fuzzy.java index 5b5d58401..1d52899bc 100644 --- a/src/main/java/cam72cam/mod/item/Fuzzy.java +++ b/src/main/java/cam72cam/mod/item/Fuzzy.java @@ -1,10 +1,9 @@ package cam72cam.mod.item; import cam72cam.mod.config.ConfigFile; +import cam72cam.mod.event.CommonEvents; import net.minecraft.block.Block; import net.minecraft.block.Blocks; -import net.minecraft.data.DataGenerator; -import net.minecraft.data.ItemTagsProvider; import net.minecraft.item.Item; import net.minecraft.item.Items; import net.minecraft.tags.ItemTags; @@ -172,6 +171,7 @@ public Fuzzy add(Block block) { /** Don't use directly (unless in version specific code) */ public Fuzzy add(Item item) { customItems.add(item); + CommonEvents.Item.TAGS.subscribe(e -> e.registerTag(tag.getId(), item)); return this; } @@ -183,30 +183,21 @@ public Fuzzy add(CustomItem item) { /** Pull other fuzzy into this one */ public Fuzzy include(Fuzzy other) { includes.add(other); + CommonEvents.Item.TAGS.subscribe(e -> e.registerTag(tag.getId(), other.tag)); return this; } + public Tag getTag() { + return tag; + } + @Override public String toString() { return ident; } - public static void register(DataGenerator gen) { - gen.addProvider(new ItemTagsProvider(gen) { - @Override - protected void registerTags() { - for (Fuzzy value : registered.values()) { - if (!value.customItems.isEmpty() || !value.includes.isEmpty()) { - Tag.Builder builder = getBuilder(value.tag); - for (Item customItem : value.customItems) { - builder.add(customItem); - } - for (Fuzzy include : value.includes) { - builder.add(include.tag); - } - } - } - } - }); + @Override + public int hashCode() { + return toString().hashCode(); } } diff --git a/src/main/java/cam72cam/mod/item/Recipes.java b/src/main/java/cam72cam/mod/item/Recipes.java index 16b923005..f39fda1f2 100644 --- a/src/main/java/cam72cam/mod/item/Recipes.java +++ b/src/main/java/cam72cam/mod/item/Recipes.java @@ -1,37 +1,15 @@ package cam72cam.mod.item; -import net.minecraft.advancements.criterion.InventoryChangeTrigger; -import net.minecraft.advancements.criterion.ItemPredicate; -import net.minecraft.advancements.criterion.MinMaxBounds; -import net.minecraft.data.DataGenerator; -import net.minecraft.data.IFinishedRecipe; -import net.minecraft.data.RecipeProvider; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.registry.Registry; -import net.minecraftforge.common.crafting.ConditionalRecipe; -import net.minecraftforge.common.crafting.conditions.ItemExistsCondition; -import net.minecraftforge.common.crafting.conditions.NotCondition; -import net.minecraftforge.common.crafting.conditions.TagEmptyCondition; +import cam72cam.mod.event.CommonEvents; +import cam72cam.mod.event.platform.RegisterCraftingRecipeEvent; import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.function.Consumer; /** Recipe registration */ -public class Recipes extends RecipeProvider { - private static final List>> registry = new ArrayList<>(); - - public Recipes(DataGenerator generatorIn) { - super(generatorIn); - } - - @Override - protected void registerRecipes(Consumer consumer) { - registry.forEach(fn -> fn.accept(consumer)); - } - +public class Recipes { public static ShapedRecipeBuilder shapedRecipe(CustomItem item, int width, Fuzzy... ingredients) { return new ShapedRecipeBuilder(new ItemStack(item, 1), width, ingredients); } @@ -41,53 +19,19 @@ public static ShapedRecipeBuilder shapedRecipe(ItemStack item, int width, Fuzzy. } public static class ShapedRecipeBuilder { - private List dependencies = new ArrayList<>(); - private List conflicts = new ArrayList<>(); + private final List dependencies = new ArrayList<>(); + private final List conflicts = new ArrayList<>(); - private ShapedRecipeBuilder(ItemStack item, int width, Fuzzy... ingredients) { - net.minecraft.data.ShapedRecipeBuilder builder = new net.minecraft.data.ShapedRecipeBuilder(item.internal.getItem(), item.getCount()); - - int height = ingredients.length / width; + private final ItemStack target; + private final int width; + private final List ingredients; - for (int h = 0; h < height; h++) { - String line = ""; - for (int w = 0; w < width; w++) { - int idx = h * width + w; - Fuzzy ingredient = ingredients[idx]; - line += ingredient == null ? " " : idx + ""; - if (ingredient != null) { - // TODO tags - builder.key((idx + "").charAt(0), ingredient.tag); - builder.addCriterion( - "has" + ingredient.toString() + idx, - new InventoryChangeTrigger.Instance( - MinMaxBounds.IntBound.UNBOUNDED, - MinMaxBounds.IntBound.UNBOUNDED, - MinMaxBounds.IntBound.UNBOUNDED, - new ItemPredicate[]{ItemPredicate.Builder.create().tag(ingredient.tag).build()} - ) - ); - } - } - builder.patternLine(line); - } - registry.add(out -> { - ResourceLocation itemName = item.internal.getItem().getRegistryName(); - ResourceLocation name = new ResourceLocation(itemName.getNamespace(), itemName.getPath() + Arrays.hashCode(ingredients) + dependencies.hashCode() + conflicts.hashCode()); + private ShapedRecipeBuilder(ItemStack item, int width, Fuzzy... ingredients) { + this.target = item; + this.width = width; + this.ingredients = Arrays.asList(ingredients); - if (!dependencies.isEmpty() || !conflicts.isEmpty()) { - ConditionalRecipe.Builder conditions = ConditionalRecipe.builder(); - for (Fuzzy dependency : dependencies) { - conditions = conditions.addCondition(new NotCondition(new TagEmptyCondition(dependency.tag.getId()))); - } - for (Fuzzy conflict : conflicts) { - conditions = conditions.addCondition(new TagEmptyCondition(conflict.tag.getId())); - } - conditions.addRecipe(builder::build).build(out, name); - } else { - builder.build(out, name); - } - }); + CommonEvents.Recipe.REGISTER.subscribe(this::register); } public ShapedRecipeBuilder require(Fuzzy ...dependencies) { @@ -99,5 +43,9 @@ public ShapedRecipeBuilder conflicts(Fuzzy ...conflicts) { this.conflicts.addAll(Arrays.asList(conflicts)); return this; } + + private void register(RegisterCraftingRecipeEvent event) { + event.register(target, width, ingredients, dependencies, conflicts); + } } } \ No newline at end of file diff --git a/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinAdvancement.java b/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinAdvancement.java new file mode 100644 index 000000000..0ccf86098 --- /dev/null +++ b/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinAdvancement.java @@ -0,0 +1,31 @@ +package cam72cam.mod.mixin.feat.data_registry; + +import cam72cam.mod.event.platform.RegisterAdvancementEvent; +import com.google.gson.JsonObject; +import com.llamalad7.mixinextras.sugar.Local; +import net.minecraft.advancements.Advancement; +import net.minecraft.advancements.AdvancementManager; +import net.minecraft.profiler.IProfiler; +import net.minecraft.resources.IResourceManager; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.ModLoader; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import java.util.Map; + +/** + * Used for injecting recipe unlock conditions for now + */ +@Mixin(AdvancementManager.class) +public class MixinAdvancement { + @Inject(method = "apply(Ljava/util/Map;Lnet/minecraft/resources/IResourceManager;Lnet/minecraft/profiler/IProfiler;)V", + at = @At(value = "NEW", target = "()Lnet/minecraft/advancements/AdvancementList;")) + public void postAdvancementReload(Map p_212853_1_, IResourceManager p_212853_2_, + IProfiler p_212853_3_, CallbackInfo ci, @Local(ordinal = 1) Map map) { + RegisterAdvancementEvent event = new RegisterAdvancementEvent(map); + ModLoader.get().postEvent(event); + } +} diff --git a/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinRecipeManager.java b/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinRecipeManager.java new file mode 100644 index 000000000..76c76a004 --- /dev/null +++ b/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinRecipeManager.java @@ -0,0 +1,32 @@ +package cam72cam.mod.mixin.feat.data_registry; + +import cam72cam.mod.event.platform.RegisterCraftingRecipeEvent; +import com.google.common.collect.ImmutableMap; +import com.google.gson.JsonObject; +import com.llamalad7.mixinextras.sugar.Local; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.item.crafting.IRecipeType; +import net.minecraft.item.crafting.RecipeManager; +import net.minecraft.profiler.IProfiler; +import net.minecraft.resources.IResourceManager; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.ModLoader; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import java.util.Map; + + +@Mixin(RecipeManager.class) +public class MixinRecipeManager { + @Inject(method = "apply(Ljava/util/Map;Lnet/minecraft/resources/IResourceManager;Lnet/minecraft/profiler/IProfiler;)V", + at = @At(value = "INVOKE", target = "Ljava/util/Map;entrySet()Ljava/util/Set;", ordinal = 1)) + public void postRecipeReload(Map splashList, IResourceManager resourceManagerIn, + IProfiler profilerIn, CallbackInfo ci, + @Local(ordinal = 1) Map, ImmutableMap.Builder>> mapLocalRef) { + RegisterCraftingRecipeEvent event = new RegisterCraftingRecipeEvent(mapLocalRef); + ModLoader.get().postEvent(event); + } +} diff --git a/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinTagCollection.java b/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinTagCollection.java new file mode 100644 index 000000000..d17d2d993 --- /dev/null +++ b/src/main/java/cam72cam/mod/mixin/feat/data_registry/MixinTagCollection.java @@ -0,0 +1,39 @@ +package cam72cam.mod.mixin.feat.data_registry; + +import cam72cam.mod.event.platform.RegisterBlockTagEvent; +import cam72cam.mod.event.platform.RegisterItemTagEvent; +import net.minecraft.resources.IResourceManager; +import net.minecraft.tags.Tag; +import net.minecraft.tags.TagCollection; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fml.ModLoader; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import java.util.Map; + +@Mixin(TagCollection.class) +public class MixinTagCollection { + @Shadow + @Final + private String resourceLocationPrefix; + + @Inject(method = "lambda$reload$3", at = @At("RETURN"), remap = false) + public void postTagReload(IResourceManager p_lambda$reload$3_1_, CallbackInfoReturnable>> cir) { + Map> map = cir.getReturnValue(); + switch (this.resourceLocationPrefix) { + case "tags/blocks": + RegisterBlockTagEvent blockTagEvent = new RegisterBlockTagEvent(map); + ModLoader.get().postEvent(blockTagEvent); + return; + case "tags/items": + RegisterItemTagEvent itemTagEvent = new RegisterItemTagEvent(map); + ModLoader.get().postEvent(itemTagEvent); + return; + } + } +} diff --git a/src/main/resources/META-INF/accesstransformer.cfg b/src/main/resources/META-INF/accesstransformer.cfg index 421e5f779..e0975d673 100644 --- a/src/main/resources/META-INF/accesstransformer.cfg +++ b/src/main/resources/META-INF/accesstransformer.cfg @@ -18,4 +18,5 @@ public net.minecraft.client.world.ClientWorld field_73035_a #connection public net.minecraft.client.gui.widget.button.CheckboxButton field_212943_a # checked public net.minecraft.util.math.shapes.VoxelShape (Lnet/minecraft/util/math/shapes/VoxelShapePart;)V public net.minecraft.util.math.shapes.VoxelShape field_197768_g # part -public net.minecraft.util.math.shapes.VoxelShapeCube (Lnet/minecraft/util/math/shapes/VoxelShapePart;)V \ No newline at end of file +public net.minecraft.util.math.shapes.VoxelShapeCube (Lnet/minecraft/util/math/shapes/VoxelShapePart;)V +public net.minecraft.item.crafting.Ingredient (Ljava/util/stream/Stream;)V diff --git a/src/main/resources/mixins.feat.universalmodcore.json b/src/main/resources/mixins.feat.universalmodcore.json index 70e0018fa..899c26de4 100644 --- a/src/main/resources/mixins.feat.universalmodcore.json +++ b/src/main/resources/mixins.feat.universalmodcore.json @@ -8,6 +8,10 @@ "compatibilityLevel": "JAVA_8", "mixinPriority": 1300, "mixins": [ + "data_registry.MixinAdvancement", + "data_registry.MixinRecipeManager", + "data_registry.MixinTagCollection", + "global_renderer.MixinRenderGlobal", "large_entity_collision.MixinVanillaWorld" ], "client": [ diff --git a/src/main/resources/template/src/main/java/PACKAGEPATH/Mod.java b/src/main/resources/template/src/main/java/PACKAGEPATH/Mod.java index b17e77e14..2f52f77ab 100644 --- a/src/main/resources/template/src/main/java/PACKAGEPATH/Mod.java +++ b/src/main/resources/template/src/main/java/PACKAGEPATH/Mod.java @@ -5,7 +5,6 @@ import net.minecraftforge.fml.event.lifecycle.GatherDataEvent; @net.minecraftforge.fml.common.Mod(Mod.MODID) -@net.minecraftforge.fml.common.Mod.EventBusSubscriber(modid = Mod.MODID, bus = net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus.MOD) public class Mod { public static final String MODID = "#ID#"; @@ -16,9 +15,4 @@ public class Mod { throw new RuntimeException("Could not load mod " + MODID, e); } } - - @SubscribeEvent - public static void genData(GatherDataEvent event) { - ModCore.genData(MODID, event); - } }