Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 0 additions & 10 deletions src/main/java/cam72cam/mod/ModCore.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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) {
Expand Down
1 change: 0 additions & 1 deletion src/main/java/cam72cam/mod/UMCMixinPlugin.java
Original file line number Diff line number Diff line change
@@ -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;
Expand Down
33 changes: 32 additions & 1 deletion src/main/java/cam72cam/mod/event/CommonEvents.java
Original file line number Diff line number Diff line change
@@ -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.RegisterRecipeEvent;
import cam72cam.mod.event.platform.RegisterItemTagEvent;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.inventory.container.ContainerType;
Expand All @@ -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! */
Expand All @@ -41,6 +47,7 @@ public static final class World {
public static final class Block {
public static final Event<Runnable> REGISTER = new Event<>();
public static final Event<EventBusForge.BlockBrokenEvent> BROKEN = new Event<>();
public static final Event<Consumer<RegisterBlockTagEvent>> TAGS = new Event<>();
}

public static final class Tile {
Expand All @@ -49,10 +56,13 @@ public static final class Tile {

public static final class Item {
public static final Event<Runnable> REGISTER = new Event<>();
public static final Event<Consumer<RegisterItemTagEvent>> TAGS = new Event<>();
}

public static final class Recipe {
public static final Event<Runnable> REGISTER = new Event<>();
public static final Event<Consumer<RegisterRecipeEvent>> REGISTER = new Event<>();
//TODO make event listener refreshable
public static ThreadLocal<List<Consumer<RegisterAdvancementEvent>>> RECIPE_TRIGGERS = ThreadLocal.withInitial(ArrayList::new);
}

public static final class Entity {
Expand Down Expand Up @@ -157,5 +167,26 @@ public static void registerEntities(RegistryEvent.Register<EntityType<?>> event)
public static void registerContainers(RegistryEvent.Register<ContainerType<?>> event) {
CONTAINER_REGISTRY.execute(x -> x.accept(event.getRegistry()));
}

@SubscribeEvent
public static void registerBlockTags(RegisterBlockTagEvent event) {
Block.TAGS.execute(x -> x.accept(event));
}

@SubscribeEvent
public static void registerItemTags(RegisterItemTagEvent event) {
Item.TAGS.execute(x -> x.accept(event));
}

@SubscribeEvent
public static void registerRecipes(RegisterRecipeEvent event) {
CommonEvents.Recipe.REGISTER.execute(x -> x.accept(event));
}

@SubscribeEvent
public static void registerAdvancements(RegisterAdvancementEvent event) {
CommonEvents.Recipe.RECIPE_TRIGGERS.get().forEach(x -> x.accept(event));
CommonEvents.Recipe.RECIPE_TRIGGERS.get().clear();
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
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.IRequirementsStrategy;
import net.minecraft.advancements.criterion.*;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.eventbus.api.Event;

import java.util.Map;

/**
* Fired when advancement datapacks are reloaded
*/
public class RegisterAdvancementEvent extends Event {
private static final ResourceLocation RECIPE_ROOT = new ResourceLocation("minecraft:recipes/root");
private final Map<ResourceLocation, Advancement.Builder> map;

public RegisterAdvancementEvent(Map<ResourceLocation, Advancement.Builder> map) {
this.map = map;
}

public void registerRecipeTrigger(ResourceLocation advancementIdent, ResourceLocation recipe, Fuzzy... trigger) {
Advancement.Builder builder = Advancement.Builder.builder().withParentId(RECIPE_ROOT);

Criterion alreadyHasRecipe = new Criterion(new RecipeUnlockedTrigger.Instance(recipe));
builder.withCriterion("already_has_recipe", alreadyHasRecipe);
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);
}
//Unlock the recipe when any of the ingredients being acquired
builder.withRequirementsStrategy(IRequirementsStrategy.OR);
builder.withRewards(AdvancementRewards.Builder.recipe(recipe));

map.put(advancementIdent, builder);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
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;

/**
* Fired when block tag datapacks are reloaded
*/
public class RegisterBlockTagEvent extends Event {
private final Map<ResourceLocation, Tag.Builder<?>> map;

public RegisterBlockTagEvent(Map<ResourceLocation, Tag.Builder<?>> map) {
this.map = map;
}

public void registerTag(ResourceLocation ident, Collection<Block> includes) {
for (Block include : includes) {
registerTag(ident, include);
}
}

public void registerTag(ResourceLocation ident, Block block) {
//Safe casting verified by event poster
Tag.Builder<Block> builder = (Tag.Builder<Block>) map.getOrDefault(ident, Tag.Builder.create());
builder.add(block);
map.put(ident, builder);
}

public void registerTag(ResourceLocation ident, Tag<Block> includes) {
//Safe casting verified by event poster
Tag.Builder<Block> builder = (Tag.Builder<Block>) map.getOrDefault(ident, Tag.Builder.create());
builder.add(new Tag.TagEntry<>(includes.getId()));
map.put(ident, builder);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package cam72cam.mod.event.platform;

import cam72cam.mod.item.ItemStack;
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;

/**
* Fired when item tag datapacks are reloaded
*/
public class RegisterItemTagEvent extends Event {
private final Map<ResourceLocation, Tag.Builder<?>> map;

public RegisterItemTagEvent(Map<ResourceLocation, Tag.Builder<?>> map) {
this.map = map;
}

public void registerTag(ResourceLocation ident, Collection<Item> includes) {
for (Item include : includes) {
registerTag(ident, include);
}
}

public void registerTag(ResourceLocation ident, Item item) {
//Safe casting verified by event poster
Tag.Builder<Item> builder = (Tag.Builder<Item>) map.getOrDefault(ident, Tag.Builder.create());
builder.add(item);
map.put(ident, builder);
}

public void registerTag(ResourceLocation ident, Tag<Item> includes) {
//Safe casting verified by event poster
Tag.Builder<Item> builder = (Tag.Builder<Item>) map.getOrDefault(ident, Tag.Builder.create());
//Don't pass in direct tag reference
builder.add(new Tag.TagEntry<>(includes.getId()));
map.put(ident, builder);
}

public void registerTag(ResourceLocation ident, ItemStack itemStack) {
//Safe casting verified by event poster
Tag.Builder<Item> builder = (Tag.Builder<Item>) map.getOrDefault(ident, Tag.Builder.create());
builder.add(itemStack.internal.getItem());
map.put(ident, builder);
}
}
32 changes: 32 additions & 0 deletions src/main/java/cam72cam/mod/event/platform/RegisterRecipeEvent.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package cam72cam.mod.event.platform;

import cam72cam.mod.event.CommonEvents;
import cam72cam.mod.item.Fuzzy;
import com.google.common.collect.ImmutableMap;
import net.minecraft.item.crafting.IRecipe;
import net.minecraft.item.crafting.IRecipeType;
import net.minecraft.item.crafting.ShapedRecipe;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.eventbus.api.Event;

import java.util.Map;

/**
* Fired when recipe datapacks are reloaded
*/
public class RegisterRecipeEvent extends Event {
Map<IRecipeType<?>, ImmutableMap.Builder<ResourceLocation, IRecipe<?>>> map;

public RegisterRecipeEvent(Map<IRecipeType<?>, ImmutableMap.Builder<ResourceLocation, IRecipe<?>>> map) {
this.map = map;
}

public void registerCraftingRecipe(ShapedRecipe recipe, Fuzzy... triggers) {
//Register corresponding unlocking advancement
CommonEvents.Recipe.RECIPE_TRIGGERS.get().add(event -> {
ResourceLocation advancement = new ResourceLocation(recipe.getId().getNamespace(), "unlock" + recipe.getId().getPath());
event.registerRecipeTrigger(advancement, recipe.getId(), triggers);
});
map.computeIfAbsent(IRecipeType.CRAFTING, o -> ImmutableMap.builder()).put(recipe.getId(), recipe);
}
}
Loading