Skip to content

Commit 3a05142

Browse files
committed
Merge branch 'feat/recipe-sync' into 1.16.x
2 parents b6715e0 + 637ce91 commit 3a05142

30 files changed

+932
-341
lines changed

src/main/java/com/robotgryphon/compactcrafting/CompactCrafting.java

Lines changed: 1 addition & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,13 @@
44
import com.robotgryphon.compactcrafting.client.render.RenderTickCounter;
55
import com.robotgryphon.compactcrafting.config.ClientConfig;
66
import com.robotgryphon.compactcrafting.core.Registration;
7-
import com.robotgryphon.compactcrafting.recipes.json.MiniaturizationPatternLoader;
8-
import net.minecraft.block.Blocks;
97
import net.minecraft.item.ItemGroup;
108
import net.minecraft.item.ItemStack;
11-
import net.minecraft.item.Items;
129
import net.minecraftforge.common.MinecraftForge;
13-
import net.minecraftforge.event.AddReloadListenerEvent;
1410
import net.minecraftforge.eventbus.api.IEventBus;
1511
import net.minecraftforge.fml.ModLoadingContext;
1612
import net.minecraftforge.fml.common.Mod;
1713
import net.minecraftforge.fml.config.ModConfig;
18-
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
19-
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
20-
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
2114
import org.apache.logging.log4j.LogManager;
2215
import org.apache.logging.log4j.Logger;
2316

@@ -32,23 +25,13 @@ public class CompactCrafting
3225
public static ItemGroup ITEM_GROUP = new ItemGroup(MOD_ID) {
3326
@Override
3427
public ItemStack createIcon() {
35-
// TODO: Change this to the crafter item
36-
return new ItemStack(Items.ENDER_PEARL);
28+
return new ItemStack(Registration.FIELD_PROJECTOR_ITEM.get());
3729
}
3830
};
3931

4032
public CompactCrafting() {
41-
IEventBus modBus = FMLJavaModLoadingContext.get().getModEventBus();
4233
IEventBus forgeBus = MinecraftForge.EVENT_BUS;
4334

44-
// Register the setup method for modloading
45-
modBus.addListener(this::setup);
46-
47-
// Register the doClientStuff method for modloading
48-
modBus.addListener(this::doClientStuff);
49-
50-
forgeBus.addListener(this::addReloadListenerEvent);
51-
5235
forgeBus.register(this);
5336
forgeBus.register(RenderTickCounter.class);
5437
forgeBus.register(ClientSetup.class);
@@ -59,21 +42,4 @@ public CompactCrafting() {
5942

6043
Registration.init();
6144
}
62-
63-
private void setup(final FMLCommonSetupEvent event)
64-
{
65-
// some preinit code
66-
LOGGER.info("HELLO FROM PREINIT");
67-
LOGGER.info("DIRT BLOCK >> {}", Blocks.DIRT.getRegistryName());
68-
}
69-
70-
private void doClientStuff(final FMLClientSetupEvent event) {
71-
// do something that can only be done on the client
72-
LOGGER.info("Got game settings {}", event.getMinecraftSupplier().get().gameSettings);
73-
}
74-
75-
private void addReloadListenerEvent(final AddReloadListenerEvent e)
76-
{
77-
e.addListener(new MiniaturizationPatternLoader());
78-
}
7945
}

src/main/java/com/robotgryphon/compactcrafting/blocks/FieldCraftingPreviewTile.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import com.robotgryphon.compactcrafting.core.Registration;
44
import com.robotgryphon.compactcrafting.crafting.EnumCraftingState;
55
import com.robotgryphon.compactcrafting.recipes.MiniaturizationRecipe;
6-
import com.robotgryphon.compactcrafting.recipes.MiniaturizationRecipeManager;
76
import net.minecraft.block.BlockState;
87
import net.minecraft.block.Blocks;
98
import net.minecraft.entity.item.ItemEntity;
@@ -80,15 +79,17 @@ public void read(BlockState state, CompoundNBT compound) {
8079

8180
if(compound.contains("recipe")) {
8281
ResourceLocation recipeId = new ResourceLocation(compound.getString("recipe"));
83-
this.recipe = MiniaturizationRecipeManager.get(recipeId).orElse(null);
82+
world.getRecipeManager()
83+
.getRecipe(recipeId)
84+
.ifPresent(recipe -> this.recipe = (MiniaturizationRecipe) recipe);
8485
}
8586
}
8687

8788
@Override
8889
public CompoundNBT write(CompoundNBT compound) {
8990
super.write(compound);
9091
if(recipe != null) {
91-
compound.putString("recipe", recipe.getRegistryName().toString());
92+
compound.putString("recipe", recipe.getId().toString());
9293
}
9394

9495
compound.putInt("progress", craftingProgress);

src/main/java/com/robotgryphon/compactcrafting/blocks/FieldProjectorBlock.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,6 @@ public ActionResultType onBlockActivated(BlockState state, World world, BlockPos
103103
Optional<BlockPos> oppositeProjector = tile.getOppositeProjector();
104104
if(!oppositeProjector.isPresent()) {
105105
// Spawn particle in valid places
106-
107106
ProjectorHelper.getValidOppositePositions(world, pos)
108107
.forEach(opp -> {
109108
((ServerWorld) world).spawnParticle(ParticleTypes.BARRIER,

src/main/java/com/robotgryphon/compactcrafting/blocks/FieldProjectorTile.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import com.robotgryphon.compactcrafting.field.MiniaturizationFieldBlockData;
1111
import com.robotgryphon.compactcrafting.field.ProjectorHelper;
1212
import com.robotgryphon.compactcrafting.recipes.MiniaturizationRecipe;
13-
import com.robotgryphon.compactcrafting.recipes.MiniaturizationRecipeManager;
1413
import com.robotgryphon.compactcrafting.world.ProjectionFieldSavedData;
1514
import com.robotgryphon.compactcrafting.world.ProjectorFieldData;
1615
import net.minecraft.block.BlockState;
@@ -25,7 +24,6 @@
2524
import net.minecraft.world.server.ServerWorld;
2625

2726
import java.awt.*;
28-
import java.util.Collection;
2927
import java.util.List;
3028
import java.util.Optional;
3129
import java.util.Set;
@@ -210,10 +208,13 @@ public void doRecipeScan() {
210208
return;
211209
}
212210

213-
Collection<MiniaturizationRecipe> entries = MiniaturizationRecipeManager.getAll();
211+
List<MiniaturizationRecipe> recipes = world.getRecipeManager()
212+
.getRecipesForType(Registration.MINIATURIZATION_RECIPE_TYPE)
213+
.stream().map(r -> (MiniaturizationRecipe) r)
214+
.collect(Collectors.toList());
214215

215216
// If there are no registered recipes, then we obv can't match anything - exit early
216-
if (entries.isEmpty()) {
217+
if (recipes.isEmpty()) {
217218
this.currentRecipe = null;
218219
updateCraftingState(EnumCraftingState.NOT_MATCHED);
219220
return;
@@ -233,7 +234,7 @@ public void doRecipeScan() {
233234
// ===========================================================================================================
234235
// RECIPE BEGIN
235236
// ===========================================================================================================
236-
Set<MiniaturizationRecipe> recipesBoundFitted = entries
237+
Set<MiniaturizationRecipe> recipesBoundFitted = recipes
237238
.stream()
238239
.filter(recipe -> recipe.fitsInDimensions(fieldBlocks.getFilledBounds()))
239240
.collect(Collectors.toSet());
@@ -287,7 +288,7 @@ private void tickCrafting() {
287288
BlockPos centerField = field.getCenterPosition();
288289
world.setBlockState(centerField, Registration.FIELD_CRAFTING_PREVIEW_BLOCK.get().getDefaultState());
289290
FieldCraftingPreviewTile tile = (FieldCraftingPreviewTile) world.getTileEntity(centerField);
290-
if(tile != null)
291+
if (tile != null)
291292
tile.setMasterProjector(this);
292293

293294
break;

src/main/java/com/robotgryphon/compactcrafting/compat/jei/JeiMiniaturizationCraftingCategory.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,8 +151,8 @@ public void setRecipe(IRecipeLayout recipeLayout, MiniaturizationRecipe recipe,
151151

152152
addOutputSlots(recipe, GUTTER_X, OFFSET_Y, guiItemStacks, numComponentSlots);
153153
} catch (Exception ex) {
154-
CompactCrafting.LOGGER.error(recipe.getRegistryName());
155-
CompactCrafting.LOGGER.error(ex);
154+
CompactCrafting.LOGGER.error(recipe.getId());
155+
CompactCrafting.LOGGER.error("Error displaying recipe", ex);
156156
}
157157

158158
int finalCatalystSlot = catalystSlot;

src/main/java/com/robotgryphon/compactcrafting/compat/jei/JeiMiniaturizationPlugin.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,20 @@
22

33
import com.robotgryphon.compactcrafting.CompactCrafting;
44
import com.robotgryphon.compactcrafting.core.Registration;
5-
import com.robotgryphon.compactcrafting.recipes.MiniaturizationRecipe;
6-
import com.robotgryphon.compactcrafting.recipes.MiniaturizationRecipeManager;
5+
import com.robotgryphon.compactcrafting.recipes.data.base.RecipeBase;
76
import mezz.jei.api.IModPlugin;
87
import mezz.jei.api.JeiPlugin;
98
import mezz.jei.api.registration.IGuiHandlerRegistration;
109
import mezz.jei.api.registration.IRecipeCatalystRegistration;
1110
import mezz.jei.api.registration.IRecipeCategoryRegistration;
1211
import mezz.jei.api.registration.IRecipeRegistration;
12+
import net.minecraft.client.Minecraft;
13+
import net.minecraft.client.world.ClientWorld;
1314
import net.minecraft.item.ItemStack;
15+
import net.minecraft.item.crafting.RecipeManager;
1416
import net.minecraft.util.ResourceLocation;
1517

16-
import java.util.Collection;
18+
import java.util.List;
1719

1820
@JeiPlugin
1921
public class JeiMiniaturizationPlugin implements IModPlugin {
@@ -41,8 +43,11 @@ public void registerRecipeCatalysts(IRecipeCatalystRegistration registration) {
4143

4244
@Override
4345
public void registerRecipes(IRecipeRegistration registration) {
44-
Collection<MiniaturizationRecipe> miniaturizationRecipes = MiniaturizationRecipeManager.getAll();
45-
46-
registration.addRecipes(miniaturizationRecipes, JeiMiniaturizationCraftingCategory.UID);
46+
ClientWorld w = Minecraft.getInstance().world;
47+
RecipeManager rm = w == null ? null : w.getRecipeManager();
48+
if(rm != null) {
49+
List<RecipeBase> miniRecipes = rm.getRecipesForType(Registration.MINIATURIZATION_RECIPE_TYPE);
50+
registration.addRecipes(miniRecipes, JeiMiniaturizationCraftingCategory.UID);
51+
}
4752
}
4853
}

src/main/java/com/robotgryphon/compactcrafting/core/Registration.java

Lines changed: 63 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -6,31 +6,60 @@
66
import com.robotgryphon.compactcrafting.blocks.FieldProjectorBlock;
77
import com.robotgryphon.compactcrafting.blocks.FieldProjectorTile;
88
import com.robotgryphon.compactcrafting.items.FieldProjectorItem;
9+
import com.robotgryphon.compactcrafting.recipes.MiniaturizationRecipe;
10+
import com.robotgryphon.compactcrafting.recipes.data.MiniaturizationRecipeSerializer;
11+
import com.robotgryphon.compactcrafting.recipes.data.base.BaseRecipeType;
12+
import com.robotgryphon.compactcrafting.recipes.data.serialization.layers.FilledLayerSerializer;
13+
import com.robotgryphon.compactcrafting.recipes.data.serialization.layers.HollowLayerSerializer;
14+
import com.robotgryphon.compactcrafting.recipes.data.serialization.layers.MixedLayerSerializer;
15+
import com.robotgryphon.compactcrafting.recipes.data.serialization.layers.RecipeLayerSerializer;
16+
import com.robotgryphon.compactcrafting.recipes.layers.impl.FilledComponentRecipeLayer;
17+
import com.robotgryphon.compactcrafting.recipes.layers.impl.HollowComponentRecipeLayer;
18+
import com.robotgryphon.compactcrafting.recipes.layers.impl.MixedComponentRecipeLayer;
919
import net.minecraft.block.AbstractBlock;
1020
import net.minecraft.block.Block;
1121
import net.minecraft.block.Blocks;
1222
import net.minecraft.block.material.Material;
1323
import net.minecraft.item.Item;
24+
import net.minecraft.item.crafting.IRecipeSerializer;
1425
import net.minecraft.tileentity.TileEntityType;
26+
import net.minecraft.util.ResourceLocation;
1527
import net.minecraftforge.common.ToolType;
28+
import net.minecraftforge.event.RegistryEvent;
1629
import net.minecraftforge.eventbus.api.IEventBus;
30+
import net.minecraftforge.eventbus.api.SubscribeEvent;
1731
import net.minecraftforge.fml.RegistryObject;
32+
import net.minecraftforge.fml.common.Mod;
1833
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
19-
import net.minecraftforge.registries.DeferredRegister;
20-
import net.minecraftforge.registries.ForgeRegistries;
34+
import net.minecraftforge.registries.*;
2135

2236
import java.util.function.Supplier;
2337

2438
import static com.robotgryphon.compactcrafting.CompactCrafting.MOD_ID;
2539

40+
@SuppressWarnings("unchecked")
41+
@Mod.EventBusSubscriber(modid = MOD_ID, bus = Mod.EventBusSubscriber.Bus.MOD)
2642
public class Registration {
2743

2844
// ================================================================================================================
2945
// REGISTRIES
3046
// ================================================================================================================
47+
48+
3149
private static final DeferredRegister<Block> BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, MOD_ID);
3250
private static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, MOD_ID);
3351
private static final DeferredRegister<TileEntityType<?>> TILE_ENTITIES = DeferredRegister.create(ForgeRegistries.TILE_ENTITIES, MOD_ID);
52+
private static final DeferredRegister<IRecipeSerializer<?>> RECIPES = DeferredRegister.create(ForgeRegistries.RECIPE_SERIALIZERS, MOD_ID);
53+
54+
public static DeferredRegister<RecipeLayerSerializer<?>> RECIPE_LAYERS = DeferredRegister.create((Class) RecipeLayerSerializer.class, MOD_ID);
55+
public static IForgeRegistry<RecipeLayerSerializer<?>> RECIPE_SERIALIZERS;
56+
57+
static {
58+
RECIPE_LAYERS.makeRegistry("recipe_layer_serializers", () -> new RegistryBuilder<RecipeLayerSerializer<?>>()
59+
.setName(new ResourceLocation(MOD_ID, "recipe_layer_serializers"))
60+
.setType(c(RecipeLayerSerializer.class))
61+
.tagFolder("recipe_layer_serializers"));
62+
}
3463

3564
// ================================================================================================================
3665
// PROPERTIES
@@ -79,58 +108,47 @@ public class Registration {
79108
// ================================================================================================================
80109
// MINIATURIZATION RECIPES
81110
// ================================================================================================================
82-
// public static final RegistryObject<MiniaturizationRecipe> SIMPLE_RECIPE = MINIATURIZATION_RECIPES.register("simple", () ->
83-
// {
84-
// MiniaturizationRecipe rec = new MiniaturizationRecipe();
85-
//
86-
// Set<BlockPos> glassColl = new HashSet<>();
87-
// Set<BlockPos> handleColl = new HashSet<>();
88-
//
89-
// BlockPos[] glass = new BlockPos[]{
90-
// new BlockPos(3, 0, 0),
91-
// new BlockPos(4, 0, 0),
92-
// new BlockPos(2, 0, 1),
93-
// new BlockPos(5, 0, 1),
94-
// new BlockPos(2, 0, 2),
95-
// new BlockPos(5, 0, 2),
96-
// new BlockPos(3, 0, 3),
97-
// new BlockPos(4, 0, 3)
98-
// };
99-
//
100-
// BlockPos[] handle = new BlockPos[]{
101-
// new BlockPos(2, 0, 3),
102-
// new BlockPos(1, 0, 4),
103-
// new BlockPos(0, 0, 5)
104-
// };
105-
//
106-
// Collections.addAll(glassColl, glass);
107-
// Collections.addAll(handleColl, handle);
108-
//
109-
// MixedComponentRecipeLayer mixed = new MixedComponentRecipeLayer();
110-
// mixed.addMultiple("S", handleColl);
111-
// mixed.addMultiple("G", glassColl);
112-
//
113-
// rec.setLayers(new IRecipeLayer[]{mixed});
114-
//
115-
// rec.catalyst = Items.ANVIL;
116-
// rec.outputs = new ItemStack[]{
117-
// new ItemStack(Items.CRYING_OBSIDIAN, 11)
118-
// };
119-
//
120-
// rec.addComponent("S", Blocks.STONE.getDefaultState());
121-
// rec.addComponent("G", Blocks.GLASS.getDefaultState());
122-
//
123-
// return rec;
124-
// });
111+
public static final RegistryObject<IRecipeSerializer<MiniaturizationRecipe>> MINIATURIZATION_SERIALIZER = RECIPES.register("miniaturization", MiniaturizationRecipeSerializer::new);
112+
113+
public static final ResourceLocation MINIATURIZATION_RECIPE_TYPE_ID = new ResourceLocation(MOD_ID, "miniaturization_recipe");
114+
115+
public static final BaseRecipeType<MiniaturizationRecipe> MINIATURIZATION_RECIPE_TYPE = new BaseRecipeType<>(MINIATURIZATION_RECIPE_TYPE_ID);
116+
117+
// ================================================================================================================
118+
// RECIPE LAYER SERIALIZERS
119+
// ================================================================================================================
120+
public static final RegistryObject<RecipeLayerSerializer<FilledComponentRecipeLayer>> FILLED_LAYER_SERIALIZER =
121+
RECIPE_LAYERS.register("filled", FilledLayerSerializer::new);
122+
123+
public static final RegistryObject<RecipeLayerSerializer<HollowComponentRecipeLayer>> HOLLOW_LAYER_SERIALIZER =
124+
RECIPE_LAYERS.register("hollow", HollowLayerSerializer::new);
125+
126+
public static final RegistryObject<RecipeLayerSerializer<MixedComponentRecipeLayer>> MIXED_LAYER_SERIALIZER =
127+
RECIPE_LAYERS.register("mixed", MixedLayerSerializer::new);
125128

126129
// ================================================================================================================
127130
// INITIALIZATION
128131
// ================================================================================================================
132+
private static <T> Class<T> c(Class<?> cls) { return (Class<T>)cls; }
133+
129134
public static void init() {
130135
IEventBus eventBus = FMLJavaModLoadingContext.get().getModEventBus();
131136

132137
BLOCKS.register(eventBus);
133138
ITEMS.register(eventBus);
134139
TILE_ENTITIES.register(eventBus);
140+
RECIPES.register(eventBus);
141+
142+
// Recipe Types (Forge Registry setup does not call this yet)
143+
MINIATURIZATION_RECIPE_TYPE.register();
144+
145+
RECIPE_LAYERS.register(eventBus);
135146
}
147+
148+
@SubscribeEvent
149+
public static void onRegistration(RegistryEvent.Register<RecipeLayerSerializer<?>> evt) {
150+
RECIPE_SERIALIZERS = evt.getRegistry();
151+
}
152+
153+
136154
}

0 commit comments

Comments
 (0)