Skip to content

Commit c692e9a

Browse files
committed
Kugelblitz WIP
1 parent 06133c9 commit c692e9a

33 files changed

+1895
-115
lines changed

src/main/java/igentuman/nc/block/entity/NuclearCraftBE.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,10 @@ public NcRecipe getCachedRecipe() {
126126
return null;
127127
}
128128

129+
public LazyOptional<IEnergyStorage> getEnergy() {
130+
return energy;
131+
}
132+
129133
protected void addToCache(NcRecipe recipe) {
130134
String key = contentHandler().getCacheKey();
131135
if(cachedRecipes.containsKey(key)) {
@@ -325,6 +329,9 @@ private void updateRecipeAfterLoad() {
325329
@Nonnull
326330
@Override
327331
public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, @Nullable Direction side) {
332+
if (cap == ForgeCapabilities.ENERGY && energyStorage() != null) {
333+
return getEnergy().cast();
334+
}
328335
if (cap == ForgeCapabilities.ITEM_HANDLER && contentHandler() != null) {
329336
return contentHandler().getItemCapability(side);
330337
}
@@ -508,7 +515,7 @@ public void setPlayer(ServerPlayer player) {
508515
public void tickClient() {
509516
}
510517

511-
protected void tickServer() {
518+
public void tickServer() {
512519

513520
}
514521
}

src/main/java/igentuman/nc/block/entity/fusion/FusionCoreBE.java

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,13 @@
77
import igentuman.nc.client.sound.SoundHandler;
88
import igentuman.nc.compat.cc.NCFusionReactorPeripheral;
99
import igentuman.nc.compat.oc2.NCFusionReactorDevice;
10-
import igentuman.nc.handler.CatalystHandler;
11-
import igentuman.nc.handler.UpgradesHandler;
1210
import igentuman.nc.handler.event.client.BlockOverlayHandler;
1311
import igentuman.nc.handler.sided.SidedContentHandler;
1412
import igentuman.nc.handler.sided.SlotModePair;
15-
import igentuman.nc.multiblock.AbstractNCMultiblock;
16-
import igentuman.nc.multiblock.ValidationResult;
17-
import igentuman.nc.multiblock.fusion.FusionReactor;
13+
import igentuman.nc.multiblock.fusion.FusionReactorRegistration;
1814
import igentuman.nc.multiblock.fusion.FusionReactorMultiblock;
1915
import igentuman.nc.radiation.data.RadiationManager;
20-
import igentuman.nc.recipes.AbstractRecipe;
2116
import igentuman.nc.recipes.NcRecipeType;
22-
import igentuman.nc.recipes.RecipeInfo;
2317
import igentuman.nc.recipes.ingredient.FluidStackIngredient;
2418
import igentuman.nc.recipes.ingredient.ItemStackIngredient;
2519
import igentuman.nc.recipes.type.NcRecipe;
@@ -29,10 +23,7 @@
2923
import net.minecraft.client.Minecraft;
3024
import net.minecraft.core.BlockPos;
3125
import net.minecraft.core.Direction;
32-
import net.minecraft.nbt.CompoundTag;
33-
import net.minecraft.network.Connection;
3426
import net.minecraft.network.FriendlyByteBuf;
35-
import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket;
3627
import net.minecraft.resources.ResourceLocation;
3728
import net.minecraft.server.level.ServerLevel;
3829
import net.minecraft.server.level.ServerPlayer;
@@ -47,7 +38,6 @@
4738
import net.minecraftforge.common.util.LazyOptional;
4839
import net.minecraftforge.energy.IEnergyStorage;
4940
import net.minecraftforge.fluids.FluidStack;
50-
import net.minecraftforge.fluids.capability.templates.FluidTank;
5141
import org.jetbrains.annotations.NotNull;
5242

5343
import javax.annotation.Nonnull;
@@ -57,7 +47,7 @@
5747
import static igentuman.nc.block.fission.FissionControllerBlock.POWERED;
5848
import static igentuman.nc.compat.oc2.NCFusionReactorDevice.DEVICE_CAPABILITY;
5949
import static igentuman.nc.handler.config.FusionConfig.FUSION_CONFIG;
60-
import static igentuman.nc.multiblock.fusion.FusionReactor.FUSION_BE;
50+
import static igentuman.nc.multiblock.fusion.FusionReactorRegistration.FUSION_BE;
6151
import static igentuman.nc.setup.registration.NCSounds.*;
6252
import static igentuman.nc.util.ModUtil.*;
6353
import static net.minecraftforge.fluids.capability.IFluidHandler.FluidAction.EXECUTE;
@@ -910,12 +900,12 @@ public Recipe(ResourceLocation id, ItemStackIngredient[] input, ItemStackIngredi
910900

911901
@Override
912902
public @NotNull String getGroup() {
913-
return FusionReactor.FUSION_BLOCKS.get(codeId).get().getName().getString();
903+
return FusionReactorRegistration.FUSION_BLOCKS.get(codeId).get().getName().getString();
914904
}
915905

916906
@Override
917907
public @NotNull ItemStack getToastSymbol() {
918-
return new ItemStack(FusionReactor.FUSION_BLOCKS.get(codeId).get());
908+
return new ItemStack(FusionReactorRegistration.FUSION_BLOCKS.get(codeId).get());
919909
}
920910

921911
public double getEnergy() {
@@ -966,7 +956,7 @@ public String getCodeId() {
966956

967957
@Override
968958
public @NotNull ItemStack getToastSymbol() {
969-
return new ItemStack(FusionReactor.FUSION_BLOCKS.get("fusion_core").get());
959+
return new ItemStack(FusionReactorRegistration.FUSION_BLOCKS.get("fusion_core").get());
970960
}
971961

972962
public double getCoolingRate() {

src/main/java/igentuman/nc/block/entity/fusion/FusionCoreProxyBE.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import igentuman.api.nc.multiblock.MultiblockAttachable;
44
import igentuman.nc.NuclearCraft;
55
import igentuman.nc.block.entity.NuclearCraftBE;
6-
import igentuman.nc.multiblock.AbstractNCMultiblock;
76
import igentuman.nc.multiblock.MultiblockHandler;
87
import igentuman.nc.multiblock.fusion.FusionReactorMultiblock;
98
import igentuman.nc.util.annotation.NBTField;
@@ -26,7 +25,7 @@
2625
import java.util.Objects;
2726

2827
import static igentuman.nc.compat.oc2.NCFusionReactorDevice.DEVICE_CAPABILITY;
29-
import static igentuman.nc.multiblock.fusion.FusionReactor.FUSION_CORE_PROXY_BE;
28+
import static igentuman.nc.multiblock.fusion.FusionReactorRegistration.FUSION_CORE_PROXY_BE;
3029
import static igentuman.nc.util.ModUtil.*;
3130

3231
public class FusionCoreProxyBE extends NuclearCraftBE implements MultiblockAttachable<FusionReactorMultiblock, FusionCoreBE> {
@@ -62,11 +61,17 @@ protected void validateCore()
6261
if(!level.isLoaded(core.getBlockPos())) {
6362
return;
6463
}
65-
core = (FusionCoreBE) level.getBlockEntity(core.getBlockPos());
64+
core = (FusionCoreBE) level.getExistingBlockEntity(core.getBlockPos());
65+
if(core == null) {
66+
core = (FusionCoreBE) level.getBlockEntity(core.getBlockPos());
67+
}
6668
corePos = core.getBlockPos();
6769
} else {
6870
if(corePos == null) return;
69-
core = (FusionCoreBE) level.getBlockEntity(corePos);
71+
core = (FusionCoreBE) level.getExistingBlockEntity(corePos);
72+
if(core == null) {
73+
core = (FusionCoreBE) level.getBlockEntity(corePos);
74+
}
7075
}
7176
}
7277

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package igentuman.nc.block.entity.kugelblitz;
2+
3+
import igentuman.nc.block.entity.NuclearCraftBE;
4+
import igentuman.nc.handler.sided.SidedContentHandler;
5+
import igentuman.nc.handler.sided.SlotModePair;
6+
import igentuman.nc.util.CustomEnergyStorage;
7+
import net.minecraft.core.BlockPos;
8+
import net.minecraft.world.level.block.entity.BlockEntityType;
9+
import net.minecraft.world.level.block.state.BlockState;
10+
import net.minecraftforge.common.util.LazyOptional;
11+
import net.minecraftforge.energy.IEnergyStorage;
12+
13+
import static igentuman.nc.multiblock.kugelblitz.KugelblitzRegistration.EXPL_BE;
14+
15+
public class EXPLBE extends NuclearCraftBE {
16+
17+
public int energyPerTick;
18+
protected final LazyOptional<IEnergyStorage> energy;
19+
public final SidedContentHandler contentHandler;
20+
public final CustomEnergyStorage energyStorage;
21+
22+
public EXPLBE(BlockPos pPos, BlockState pBlockState) {
23+
super(EXPL_BE.get(), pPos, pBlockState);
24+
energyStorage = createEnergy();
25+
energy = LazyOptional.of(() -> energyStorage);
26+
contentHandler = new SidedContentHandler(
27+
0, 0,
28+
1, 1, 10, 10);
29+
contentHandler().setBlockEntity(this);
30+
contentHandler().fluidCapability.setGlobalMode(0, SlotModePair.SlotMode.INPUT);
31+
contentHandler().fluidCapability.setGlobalMode(1, SlotModePair.SlotMode.OUTPUT);
32+
}
33+
34+
public EXPLBE(BlockEntityType<?> pType, BlockPos pPos, BlockState pBlockState) {
35+
this(pPos, pBlockState);
36+
}
37+
38+
protected CustomEnergyStorage createEnergy() {
39+
return new CustomEnergyStorage(2_048_000_000, 5000000, 0) {
40+
@Override
41+
protected void onEnergyChanged() {
42+
setChanged();
43+
}
44+
};
45+
}
46+
47+
@Override
48+
public SidedContentHandler contentHandler() {
49+
return contentHandler;
50+
}
51+
52+
@Override
53+
public CustomEnergyStorage energyStorage() {
54+
return energyStorage;
55+
}
56+
57+
@Override
58+
public LazyOptional<IEnergyStorage> getEnergy() {
59+
return energy;
60+
}
61+
}
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package igentuman.nc.block.entity.kugelblitz;
2+
3+
import igentuman.nc.block.entity.NuclearCraftBE;
4+
import igentuman.nc.util.annotation.NBTField;
5+
import net.minecraft.core.BlockPos;
6+
import net.minecraft.core.Direction;
7+
import net.minecraft.world.level.block.entity.BlockEntity;
8+
import net.minecraft.world.level.block.entity.BlockEntityType;
9+
import net.minecraft.world.level.block.state.BlockState;
10+
import net.minecraftforge.common.capabilities.Capability;
11+
import net.minecraftforge.common.util.LazyOptional;
12+
13+
import javax.annotation.Nonnull;
14+
import javax.annotation.Nullable;
15+
16+
import static igentuman.nc.multiblock.kugelblitz.KugelblitzRegistration.EXPL_PROXY_BE;
17+
18+
public class EXPLProxyBE extends NuclearCraftBE {
19+
20+
@NBTField
21+
public BlockPos corePos = BlockPos.ZERO;
22+
private EXPLBE core;
23+
24+
public EXPLProxyBE(BlockPos pPos, BlockState pBlockState) {
25+
super(EXPL_PROXY_BE.get(), pPos, pBlockState);
26+
}
27+
28+
public EXPLProxyBE(BlockEntityType<?> pType, BlockPos pPos, BlockState pBlockState) {
29+
this(pPos, pBlockState);
30+
}
31+
32+
public void setCore(EXPLBE core) {
33+
this.core = core;
34+
}
35+
36+
public int getAnalogSignal() {
37+
return 0;
38+
}
39+
40+
public BlockPos getCorePos() {
41+
if (corePos == BlockPos.ZERO) {
42+
if (core != null) {
43+
corePos = core.getBlockPos();
44+
}
45+
}
46+
return corePos;
47+
}
48+
49+
public EXPLBE getCoreBE() {
50+
if (core == null) {
51+
BlockEntity be = level.getExistingBlockEntity(corePos);
52+
if (be == null) {
53+
be = level.getBlockEntity(corePos);
54+
}
55+
if (be instanceof EXPLBE) {
56+
core = (EXPLBE) be;
57+
}
58+
}
59+
return core;
60+
}
61+
62+
public void destroyCore() {
63+
}
64+
65+
@Nonnull
66+
@Override
67+
public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, @Nullable Direction side) {
68+
if(getCoreBE() == null) return super.getCapability(cap, side);
69+
return getCoreBE().getCapability(cap, side);
70+
}
71+
}

src/main/java/igentuman/nc/block/fusion/FusionBeBlock.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import igentuman.api.nc.multiblock.MultiblockAttachable;
44
import igentuman.nc.block.entity.fusion.FusionCoreProxyBE;
55
import igentuman.nc.multiblock.AbstractNCMultiblock;
6-
import igentuman.nc.multiblock.fusion.FusionReactor;
6+
import igentuman.nc.multiblock.fusion.FusionReactorRegistration;
77
import net.minecraft.ChatFormatting;
88
import net.minecraft.core.BlockPos;
99
import net.minecraft.network.chat.Component;
@@ -52,7 +52,7 @@ public BlockState getStateForPlacement(BlockPlaceContext context) {
5252
@Nullable
5353
@Override
5454
public BlockEntity newBlockEntity(BlockPos pPos, BlockState pState) {
55-
return FusionReactor.FUSION_BE.get(getCode()).get().create(pPos, pState);
55+
return FusionReactorRegistration.FUSION_BE.get(getCode()).get().create(pPos, pState);
5656
}
5757

5858
public String getCode()

src/main/java/igentuman/nc/block/fusion/FusionCoreBlock.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@
3838

3939
import java.util.List;
4040

41-
import static igentuman.nc.multiblock.fusion.FusionReactor.FUSION_BE;
42-
import static igentuman.nc.multiblock.fusion.FusionReactor.FUSION_CORE_PROXY;
41+
import static igentuman.nc.multiblock.fusion.FusionReactorRegistration.FUSION_BE;
42+
import static igentuman.nc.multiblock.fusion.FusionReactorRegistration.FUSION_CORE_PROXY;
4343

4444
public class FusionCoreBlock extends FusionBeBlock {
4545
public static final BooleanProperty ACTIVE = BlockStateProperties.POWERED;

src/main/java/igentuman/nc/block/fusion/FusionCoreProxyBlock.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
import net.minecraftforge.registries.ForgeRegistries;
2727
import org.jetbrains.annotations.Nullable;
2828

29-
import static igentuman.nc.multiblock.fusion.FusionReactor.FUSION_CORE_PROXY_BE;
29+
import static igentuman.nc.multiblock.fusion.FusionReactorRegistration.FUSION_CORE_PROXY_BE;
3030

3131
public class FusionCoreProxyBlock extends FusionBeBlock {
3232

@@ -64,7 +64,7 @@ public void onRemove(BlockState pState, Level pLevel, BlockPos pPos, BlockState
6464
@Override
6565
public InteractionResult use(BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult result) {
6666
if (!level.isClientSide()) {
67-
BlockEntity be = level.getBlockEntity(pos);
67+
BlockEntity be = level.getExistingBlockEntity(pos);
6868
FusionCoreProxyBE proxy = (FusionCoreProxyBE) be;
6969

7070
if (proxy.getCoreBE() instanceof FusionCoreBE) {
@@ -115,6 +115,6 @@ public boolean hasAnalogOutputSignal(BlockState pState) {
115115

116116
@Override
117117
public int getAnalogOutputSignal(BlockState pBlockState, Level pLevel, BlockPos pPos) {
118-
return pLevel.getBlockEntity(pPos) instanceof FusionCoreProxyBE be ? be.getAnalogSignal() : 0;
118+
return pLevel.getExistingBlockEntity(pPos) instanceof FusionCoreProxyBE be ? be.getAnalogSignal() : 0;
119119
}
120120
}

0 commit comments

Comments
 (0)