Skip to content

Commit 71b3115

Browse files
committed
Update recipe serializers
1 parent 68b0fbb commit 71b3115

24 files changed

Lines changed: 312 additions & 478 deletions

src/datagen/java/malte0811/controlengineering/datagen/recipes/KeyDataRecipeBuilder.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import com.google.gson.JsonObject;
44
import malte0811.controlengineering.crafting.CERecipeSerializers;
5-
import malte0811.controlengineering.crafting.OptionalKeyCopySerializer;
65
import net.minecraft.data.recipes.FinishedRecipe;
76
import net.minecraft.resources.ResourceLocation;
87
import net.minecraft.world.item.crafting.RecipeSerializer;

src/datagen/java/malte0811/controlengineering/datagen/recipes/SingleIngredRecipeBuilder.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package malte0811.controlengineering.datagen.recipes;
22

33
import com.google.gson.JsonObject;
4-
import malte0811.controlengineering.crafting.SingleIngredientRecipeSerializer;
54
import malte0811.controlengineering.util.RLUtils;
65
import net.minecraft.data.recipes.FinishedRecipe;
76
import net.minecraft.resources.ResourceLocation;
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package malte0811.controlengineering.blockentity;
2+
3+
import malte0811.controlengineering.blockentity.bus.ScopeBlockEntity;
4+
import malte0811.controlengineering.blockentity.logic.LogicCabinetBlockEntity;
5+
import malte0811.controlengineering.blockentity.panels.PanelCNCBlockEntity;
6+
import net.minecraft.world.level.block.entity.BlockEntity;
7+
import net.minecraft.world.level.block.entity.BlockEntityType;
8+
import net.neoforged.bus.api.SubscribeEvent;
9+
import net.neoforged.fml.common.EventBusSubscriber;
10+
import net.neoforged.neoforge.capabilities.BlockCapability;
11+
import net.neoforged.neoforge.capabilities.ICapabilityProvider;
12+
import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent;
13+
14+
import java.util.Objects;
15+
import java.util.function.Function;
16+
import java.util.function.Supplier;
17+
18+
@EventBusSubscriber
19+
public class BlockCapabilities {
20+
@SubscribeEvent
21+
public static void registerBlockCapabilities(RegisterCapabilitiesEvent event) {
22+
LogicCabinetBlockEntity.registerCapabilities(BlockCapabilities.forType(event, CEBlockEntities.LOGIC_CABINET.master()));
23+
ScopeBlockEntity.registerCapabilities(BlockCapabilities.forType(event, CEBlockEntities.SCOPE));
24+
PanelCNCBlockEntity.Dummy.registerCapabilities(BlockCapabilities.forType(event, CEBlockEntities.PANEL_CNC.dummy()));
25+
}
26+
27+
private static <BE extends BlockEntity> BECapabilityRegistrar<BE> forType(
28+
RegisterCapabilitiesEvent ev, Supplier<BlockEntityType<BE>> type
29+
) {
30+
return new BECapabilityRegistrar<>() {
31+
@Override
32+
public <C, T> void register(
33+
BlockCapability<T, C> capability,
34+
ICapabilityProvider<? super BE, C, T> provider
35+
) {
36+
ev.registerBlockEntity(capability, type.get(), provider);
37+
}
38+
};
39+
}
40+
41+
public interface BECapabilityRegistrar<BE> {
42+
<C, T> void register(BlockCapability<T, C> capability, ICapabilityProvider<? super BE, C, T> provider);
43+
}
44+
}

src/main/java/malte0811/controlengineering/blockentity/CEBlockEntities.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public class CEBlockEntities {
5555
"control_panel", ControlPanelBlockEntity::new, CEBlocks.CONTROL_PANEL, PanelBlock::isMaster
5656
);
5757

58-
public static MultiblockBEType<PanelCNCBlockEntity, ?> PANEL_CNC = PanelCNCBlockEntity.register(REGISTER);
58+
public static MultiblockBEType<PanelCNCBlockEntity, PanelCNCBlockEntity.Dummy> PANEL_CNC = PanelCNCBlockEntity.register(REGISTER);
5959

6060
public static MultiblockBEType<PanelDesignerBlockEntity, ?> PANEL_DESIGNER = makeMBType(
6161
"panel_designer", PanelDesignerBlockEntity::new, CEBlocks.PANEL_DESIGNER, PanelDesignerBlock::isMaster

src/main/java/malte0811/controlengineering/blockentity/bus/ScopeBlockEntity.java

Lines changed: 12 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import blusunrize.immersiveengineering.api.IETags;
44
import it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet;
55
import malte0811.controlengineering.ControlEngineering;
6+
import malte0811.controlengineering.blockentity.BlockCapabilities;
67
import malte0811.controlengineering.blockentity.base.CEBlockEntity;
78
import malte0811.controlengineering.blockentity.base.IExtraDropBE;
89
import malte0811.controlengineering.blocks.bus.ScopeBlock;
@@ -25,6 +26,7 @@
2526
import malte0811.controlengineering.scope.module.ScopeModules;
2627
import malte0811.controlengineering.scope.trace.Traces;
2728
import malte0811.controlengineering.util.*;
29+
import malte0811.controlengineering.util.energy.CEEnergyStorage;
2830
import malte0811.controlengineering.util.math.MatrixUtils;
2931
import malte0811.controlengineering.util.mycodec.MyCodec;
3032
import malte0811.controlengineering.util.mycodec.MyCodecs;
@@ -35,19 +37,16 @@
3537
import net.minecraft.nbt.CompoundTag;
3638
import net.minecraft.network.chat.Component;
3739
import net.minecraft.server.level.ServerPlayer;
38-
import net.minecraft.world.InteractionResult;
3940
import net.minecraft.world.ItemInteractionResult;
4041
import net.minecraft.world.SimpleMenuProvider;
4142
import net.minecraft.world.item.ItemStack;
4243
import net.minecraft.world.item.context.UseOnContext;
4344
import net.minecraft.world.level.block.Block;
4445
import net.minecraft.world.level.block.entity.BlockEntityType;
4546
import net.minecraft.world.level.block.state.BlockState;
46-
import net.neoforged.neoforge.energy.EnergyStorage;
47-
import net.neoforged.neoforge.energy.IEnergyStorage;
47+
import net.neoforged.neoforge.capabilities.Capabilities;
4848

4949
import javax.annotation.Nonnull;
50-
import javax.annotation.Nullable;
5150
import java.util.ArrayList;
5251
import java.util.Comparator;
5352
import java.util.List;
@@ -76,7 +75,7 @@ public class ScopeBlockEntity extends CEBlockEntity implements SelectionShapeOwn
7675
private GlobalConfig globalConfig = new GlobalConfig();
7776
private Traces traces = new Traces();
7877
private final Set<ScopeMenu> openMenus = new ReferenceOpenHashSet<>();
79-
private final EnergyStorage energy = new EnergyStorage(BASE_POWER_PER_TICK * 200, 256 + BASE_POWER_PER_TICK) {
78+
private final CEEnergyStorage energy = new CEEnergyStorage(BASE_POWER_PER_TICK * 200, 256 + BASE_POWER_PER_TICK) {
8079
@Override
8180
public int receiveEnergy(int maxReceive, boolean simulate) {
8281
final var hadPower = hasPower();
@@ -93,7 +92,6 @@ public int extractEnergy(int maxExtract, boolean simulate) {
9392
return result;
9493
}
9594
};
96-
private final LazyOptional<IEnergyStorage> energyCap = CapabilityUtils.constantOptional(energy);
9795
private int syncedPowerRequirement;
9896

9997
public ScopeBlockEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
@@ -153,7 +151,7 @@ public void loadAdditional(@Nonnull CompoundTag tag, HolderLookup.Provider provi
153151
currentBusState = BusState.CODEC.fromNBT(tag.get("busInput"), () -> BusState.EMPTY);
154152
globalConfig = GlobalConfig.CODEC.fromNBT(tag.get("globalConfig"), GlobalConfig::new);
155153
traces = Traces.CODEC.fromNBT(tag.get("traces"), Traces::new);
156-
energy.deserializeNBT(provider, tag.get("energy"));
154+
energy.readNBT(tag.get("energy"));
157155
}
158156

159157
@Override
@@ -163,7 +161,7 @@ protected void saveAdditional(@Nonnull CompoundTag tag, HolderLookup.Provider pr
163161
tag.put("busInput", BusState.CODEC.toNBT(this.currentBusState));
164162
tag.put("globalConfig", GlobalConfig.CODEC.toNBT(this.globalConfig));
165163
tag.put("traces", Traces.CODEC.toNBT(traces));
166-
tag.put("energy", energy.serializeNBT(provider));
164+
tag.put("energy", energy.writeNBT());
167165
}
168166

169167
@Override
@@ -330,19 +328,12 @@ public boolean canConnect(Direction fromSide) {
330328
@Override
331329
public void addMarkDirtyCallback(Clearable<Runnable> markDirty) { }
332330

333-
@Override
334-
@Nonnull
335-
public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, @Nullable Direction side) {
336-
if (side == getFacing() || side == null) {
337-
return ForgeCapabilities.ENERGY.orEmpty(cap, energyCap);
338-
}
339-
return super.getCapability(cap, side);
340-
}
341-
342-
@Override
343-
public void invalidateCaps() {
344-
super.invalidateCaps();
345-
energyCap.invalidate();
331+
public static void registerCapabilities(BlockCapabilities.BECapabilityRegistrar<ScopeBlockEntity> registrar)
332+
{
333+
registrar.register(
334+
Capabilities.EnergyStorage.BLOCK,
335+
(be, side) -> side == be.getFacing() || side == null ? be.energy.insertOnlyView() : null
336+
);
346337
}
347338

348339
public Direction getFacing() {

src/main/java/malte0811/controlengineering/blockentity/logic/CircuitIngredientDrawer.java

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import malte0811.controlengineering.util.ItemUtil;
44
import malte0811.controlengineering.util.LambdaMutable;
5+
import net.minecraft.core.HolderLookup;
56
import net.minecraft.nbt.CompoundTag;
67
import net.minecraft.nbt.Tag;
78
import net.minecraft.tags.TagKey;
@@ -94,24 +95,14 @@ public void clear() {
9495
storedCount = 0;
9596
}
9697

97-
public void read(CompoundTag nbt) {
98-
if (!nbt.contains(COUNT_KEY, Tag.TAG_INT)) {
99-
var contentStack = ItemStack.of(nbt);
100-
this.storedCount = contentStack.getCount();
101-
if (contentStack.isEmpty()) {
102-
this.storedType = ItemStack.EMPTY;
103-
} else {
104-
this.storedType = ItemHandlerHelper.copyStackWithSize(contentStack, 1);
105-
}
106-
} else {
107-
this.storedType = ItemStack.of(nbt.getCompound(ITEM_KEY));
108-
this.storedCount = nbt.getInt(COUNT_KEY);
109-
}
98+
public void read(CompoundTag nbt, HolderLookup.Provider provider) {
99+
this.storedType = ItemStack.parseOptional(provider, nbt.getCompound(ITEM_KEY));
100+
this.storedCount = nbt.getInt(COUNT_KEY);
110101
}
111102

112-
public CompoundTag write() {
103+
public CompoundTag write(HolderLookup.Provider provider) {
113104
var result = new CompoundTag();
114-
result.put(ITEM_KEY, storedType.save(new CompoundTag()));
105+
result.put(ITEM_KEY, storedType.save(provider));
115106
result.putInt(COUNT_KEY, storedCount);
116107
return result;
117108
}

src/main/java/malte0811/controlengineering/blockentity/logic/LogicCabinetBlockEntity.java

Lines changed: 13 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import blusunrize.immersiveengineering.api.IETags;
44
import blusunrize.immersiveengineering.api.utils.client.ModelDataUtils;
55
import com.mojang.datafixers.util.Pair;
6+
import malte0811.controlengineering.blockentity.BlockCapabilities;
7+
import malte0811.controlengineering.blockentity.BlockCapabilities.BECapabilityRegistrar;
68
import malte0811.controlengineering.blockentity.base.CEBlockEntity;
79
import malte0811.controlengineering.blockentity.base.IExtraDropBE;
810
import malte0811.controlengineering.blockentity.base.IHasMaster;
@@ -45,13 +47,9 @@
4547
import net.minecraft.world.level.block.entity.BlockEntityType;
4648
import net.minecraft.world.level.block.state.BlockState;
4749
import net.minecraft.world.phys.shapes.VoxelShape;
50+
import net.neoforged.neoforge.capabilities.Capabilities;
4851
import net.neoforged.neoforge.client.model.data.ModelData;
49-
import net.neoforged.neoforge.common.capabilities.Capability;
50-
import net.neoforged.neoforge.common.capabilities.ForgeCapabilities;
51-
import net.neoforged.neoforge.common.util.LazyOptional;
5252
import net.neoforged.neoforge.energy.IEnergyStorage;
53-
import net.neoforged.network.NetworkHooks;
54-
import net.neoforged.neoforge.registries.RegistryObject;
5553

5654
import javax.annotation.Nonnull;
5755
import javax.annotation.Nullable;
@@ -171,23 +169,12 @@ public boolean canConnect(Direction fromSide) {
171169
return fromSide == getRotatedDirection(false);
172170
}
173171

174-
private final LazyOptional<IEnergyStorage> energyCap = LazyOptional.of(energy::insertOnlyView);
175-
176-
@Nonnull
177-
@Override
178-
public <T> LazyOptional<T> getCapability(
179-
@Nonnull Capability<T> cap, @Nullable Direction side
180-
) {
181-
if (cap == ForgeCapabilities.ENERGY && side == getFacing(getBlockState())) {
182-
return energyCap.cast();
183-
}
184-
return super.getCapability(cap, side);
185-
}
186-
187-
@Override
188-
public void invalidateCaps() {
189-
super.invalidateCaps();
190-
energyCap.invalidate();
172+
public static void registerCapabilities(BECapabilityRegistrar<LogicCabinetBlockEntity> registrar)
173+
{
174+
registrar.register(
175+
Capabilities.EnergyStorage.BLOCK,
176+
(be, side) -> side == be.getFacing() || side == null ? be.energy.insertOnlyView() : null
177+
);
191178
}
192179

193180
@Override
@@ -222,6 +209,10 @@ public void setSchematicAndComputeCircuit(@Nonnull Schematic schematic) {
222209
}
223210
}
224211

212+
private Direction getFacing() {
213+
return getFacing(getBlockState());
214+
}
215+
225216
private static Direction getFacing(BlockState state) {
226217
return state.getValue(LogicCabinetBlock.FACING);
227218
}

src/main/java/malte0811/controlengineering/blockentity/logic/LogicWorkbenchBlockEntity.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -159,18 +159,18 @@ public SelectionShapes getShape() {
159159

160160
@Override
161161
protected void writeSyncedData(CompoundTag out, HolderLookup.Provider provider) {
162-
writeCommonData(out);
162+
writeCommonData(out, provider);
163163
out.putBoolean("hasSchematic", schematic != null);
164164
}
165165

166-
private void writeCommonData(CompoundTag out) {
167-
out.put("tubes", tubeStorage.write());
168-
out.put("wires", wireStorage.write());
166+
private void writeCommonData(CompoundTag out, HolderLookup.Provider provider) {
167+
out.put("tubes", tubeStorage.write(provider));
168+
out.put("wires", wireStorage.write(provider));
169169
}
170170

171171
@Override
172172
protected void readSyncedData(CompoundTag in, HolderLookup.Provider provider) {
173-
readCommonData(in);
173+
readCommonData(in, provider);
174174
var hadSchematic = schematic != null;
175175
var hasSchematic = in.getBoolean("hasSchematic");
176176
schematic = hasSchematic ? new Schematic() : null;
@@ -179,9 +179,9 @@ protected void readSyncedData(CompoundTag in, HolderLookup.Provider provider) {
179179
}
180180
}
181181

182-
private void readCommonData(CompoundTag in) {
183-
tubeStorage.read(in.getCompound("tubes"));
184-
wireStorage.read(in.getCompound("wires"));
182+
private void readCommonData(CompoundTag in, HolderLookup.Provider provider) {
183+
tubeStorage.read(in.getCompound("tubes"), provider);
184+
wireStorage.read(in.getCompound("wires"), provider);
185185
}
186186

187187
@Override
@@ -190,7 +190,7 @@ public void saveAdditional(@Nonnull CompoundTag compound, HolderLookup.Provider
190190
if (schematic != null) {
191191
compound.put("schematic", Schematic.CODEC.toNBT(schematic));
192192
}
193-
writeCommonData(compound);
193+
writeCommonData(compound, provider);
194194
}
195195

196196
@Override
@@ -202,7 +202,7 @@ public void loadAdditional(@Nonnull CompoundTag nbt, HolderLookup.Provider provi
202202
} else {
203203
schematic = null;
204204
}
205-
readCommonData(nbt);
205+
readCommonData(nbt, provider);
206206
}
207207

208208
private ItemInteractionResult handleMainClick(UseOnContext ctx) {

0 commit comments

Comments
 (0)