Skip to content

Commit a06ac25

Browse files
committed
fix detectors
1 parent 3502bc3 commit a06ac25

12 files changed

Lines changed: 156 additions & 133 deletions

src/main/java/de/srendi/advancedperipherals/AdvancedPeripherals.java

Lines changed: 0 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,23 @@
11
package de.srendi.advancedperipherals;
22

3-
import dan200.computercraft.api.media.MediaCapability;
4-
import dan200.computercraft.api.peripheral.PeripheralCapability;
5-
import dan200.computercraft.shared.media.MountMedia;
63
import de.srendi.advancedperipherals.common.addons.APAddon;
74
import de.srendi.advancedperipherals.common.addons.ae2.AEApi;
85
import de.srendi.advancedperipherals.common.addons.ae2.AE2Registries;
96
import de.srendi.advancedperipherals.common.addons.computercraft.integrations.IntegrationPeripheralProvider;
107
import de.srendi.advancedperipherals.common.addons.refinedstorage.RSApi;
11-
import de.srendi.advancedperipherals.common.blocks.base.ICapabilityProvider;
12-
import de.srendi.advancedperipherals.common.blocks.blockentities.GasDetectorEntity;
138
import de.srendi.advancedperipherals.common.configuration.APConfig;
14-
import de.srendi.advancedperipherals.common.items.SmartGlassesItem;
15-
import de.srendi.advancedperipherals.common.setup.APItems;
169
import de.srendi.advancedperipherals.common.setup.APRegistration;
1710
import de.srendi.advancedperipherals.common.util.ChunkManager;
1811
import net.minecraft.resources.ResourceLocation;
19-
import net.minecraft.world.level.ItemLike;
2012
import net.neoforged.bus.api.IEventBus;
2113
import net.neoforged.fml.ModLoadingContext;
2214
import net.neoforged.fml.common.Mod;
2315
import net.neoforged.fml.event.lifecycle.FMLLoadCompleteEvent;
24-
import net.neoforged.neoforge.capabilities.Capabilities;
2516
import net.neoforged.neoforge.capabilities.RegisterCapabilitiesEvent;
2617
import org.apache.logging.log4j.Level;
2718
import org.apache.logging.log4j.LogManager;
2819
import org.apache.logging.log4j.Logger;
2920
import org.jetbrains.annotations.Nullable;
30-
import top.theillusivec4.curios.api.CuriosCapability;
31-
import top.theillusivec4.curios.api.type.capability.ICurio;
32-
3321
import java.security.MessageDigest;
3422
import java.security.NoSuchAlgorithmException;
3523
import java.util.Random;
@@ -110,62 +98,6 @@ public void onLoadComplete(FMLLoadCompleteEvent event) {
11098
}
11199

112100
public void registerCapabilities(RegisterCapabilitiesEvent event) {
113-
APRegistration.BLOCK_ENTITIES.getEntries().forEach((entry) -> {
114-
event.registerBlockEntity(
115-
PeripheralCapability.get(),
116-
entry.get(),
117-
(blockEntity, side) -> blockEntity instanceof ICapabilityProvider provider
118-
? provider.createPeripheralCap(side)
119-
: null
120-
);
121-
event.registerBlockEntity(
122-
Capabilities.ItemHandler.BLOCK,
123-
entry.get(),
124-
(blockEntity, side) -> blockEntity instanceof ICapabilityProvider provider
125-
? provider.createItemHandlerCap(side)
126-
: null
127-
);
128-
event.registerBlockEntity(
129-
Capabilities.FluidHandler.BLOCK,
130-
entry.get(),
131-
(blockEntity, side) -> blockEntity instanceof ICapabilityProvider provider
132-
? provider.createFluidHandlerCap(side)
133-
: null
134-
);
135-
event.registerBlockEntity(
136-
Capabilities.EnergyStorage.BLOCK,
137-
entry.get(),
138-
(blockEntity, side) -> blockEntity instanceof ICapabilityProvider provider
139-
? provider.createEnergyStorageCap(side)
140-
: null
141-
);
142-
event.registerBlockEntity(
143-
mekanism.common.capabilities.Capabilities.CHEMICAL.block(),
144-
entry.get(),
145-
(blockEntity, side) -> blockEntity instanceof GasDetectorEntity provider
146-
? provider.createProxy()
147-
: null
148-
);
149-
});
150-
151-
ItemLike[] smartGlasses = new ItemLike[]{
152-
APItems.SMART_GLASSES.get(),
153-
APItems.SMART_GLASSES_NETHERITE.get(),
154-
};
155-
event.registerItem(MediaCapability.get(), (stack, ignored) -> MountMedia.COMPUTER, smartGlasses);
156-
event.registerItem(
157-
Capabilities.ItemHandler.ITEM,
158-
(stack, ignored) -> ((SmartGlassesItem) stack.getItem()).createItemHandlerCap(stack),
159-
smartGlasses
160-
);
161-
if (APAddon.CURIOS.isLoaded()) {
162-
event.registerItem(
163-
CuriosCapability.ITEM,
164-
(stack, ignored) -> (ICurio) ((SmartGlassesItem) stack.getItem()).createCurioCap(stack),
165-
smartGlasses
166-
);
167-
}
168-
169101
if (APAddon.AE2.isLoaded()) {
170102
AEApi.registerCapabilities(event);
171103
}

src/main/java/de/srendi/advancedperipherals/common/blocks/base/BaseDetectorEntity.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import net.minecraft.world.level.block.entity.BlockEntityType;
1212
import net.minecraft.world.level.block.state.BlockState;
1313
import net.neoforged.neoforge.capabilities.BlockCapability;
14-
import net.neoforged.neoforge.capabilities.ICapabilityProvider;
1514
import org.jetbrains.annotations.NotNull;
1615
import org.jetbrains.annotations.Nullable;
1716

@@ -20,7 +19,7 @@
2019
* @param <S> The storage proxy type, must implements/extends both {@code <T>} and {@link IStorageProxy}
2120
* @param <P> The peripheral type, must extends {@link BasePeripheral}
2221
*/
23-
public abstract class BaseDetectorEntity<T, S extends IStorageProxy, P extends BasePeripheral<?>> extends PeripheralBlockEntity<P> implements ICapabilityProvider<BlockEntity, Direction, Object> {
22+
public abstract class BaseDetectorEntity<T, S extends IStorageProxy, P extends BasePeripheral<?>> extends PeripheralBlockEntity<P> {
2423

2524
private static final String RATE_LIMIT_TAG = "RateLimit";
2625

@@ -103,19 +102,19 @@ public Direction getOutputDirection() {
103102
return this.getBlockState().getValue(BaseBlock.ORIENTATION).front().getOpposite();
104103
}
105104

106-
@Override
107-
public @Nullable Object getCapability(BlockEntity self, Direction context) {
105+
@Nullable
106+
public T getCapability(Direction context) {
108107
Direction inputDirection = this.getInputDirection();
109108
Direction outputDirection = this.getOutputDirection();
110109
if (context == inputDirection) {
111-
return this.getStorageProxy();
112-
} else if (context == outputDirection) {
110+
return (T) this.getStorageProxy();
111+
}
112+
if (context == outputDirection) {
113113
if (this.zeroStorageCap == null) {
114114
this.zeroStorageCap = this.getZeroStorage();
115115
}
116116
return this.zeroStorageCap;
117117
}
118-
119118
return null;
120119
}
121120

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package de.srendi.advancedperipherals.common.blocks.base;
2+
3+
import dan200.computercraft.api.peripheral.IPeripheral;
4+
import net.minecraft.core.Direction;
5+
import net.neoforged.neoforge.energy.IEnergyStorage;
6+
import net.neoforged.neoforge.fluids.capability.IFluidHandler;
7+
import net.neoforged.neoforge.items.IItemHandler;
8+
import org.jetbrains.annotations.Nullable;
9+
10+
public final class BlockCapabilityProviders {
11+
public interface EnergyStorage {
12+
@Nullable
13+
IEnergyStorage createEnergyStorageCap(@Nullable Direction side);
14+
}
15+
16+
public interface FluidHandler {
17+
@Nullable
18+
IFluidHandler createFluidHandlerCap(@Nullable Direction side);
19+
}
20+
21+
public interface ItemHandler {
22+
@Nullable
23+
IItemHandler createItemHandlerCap(@Nullable Direction side);
24+
}
25+
26+
public interface Peripheral {
27+
@Nullable
28+
IPeripheral createPeripheralCap(@Nullable Direction side);
29+
}
30+
31+
public interface ChemicalHandler {
32+
@Nullable
33+
Object /*IChemicalHandler*/ createChemicalHandlerCap(@Nullable Direction side);
34+
}
35+
}

src/main/java/de/srendi/advancedperipherals/common/blocks/base/ICapabilityProvider.java

Lines changed: 0 additions & 32 deletions
This file was deleted.

src/main/java/de/srendi/advancedperipherals/common/blocks/base/PeripheralBlockEntity.java

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,19 +21,16 @@
2121
import net.minecraft.world.level.block.entity.BlockEntity;
2222
import net.minecraft.world.level.block.entity.BlockEntityType;
2323
import net.minecraft.world.level.block.state.BlockState;
24-
import net.neoforged.neoforge.fluids.capability.IFluidHandler;
25-
import net.neoforged.neoforge.fluids.capability.templates.FluidTank;
2624
import net.neoforged.neoforge.items.IItemHandler;
2725
import net.neoforged.neoforge.items.wrapper.SidedInvWrapper;
2826
import org.jetbrains.annotations.NotNull;
2927
import org.jetbrains.annotations.Nullable;
3028

31-
public abstract class PeripheralBlockEntity<T extends BasePeripheral<?>> extends BaseContainerBlockEntity implements WorldlyContainer, IPeripheralBlockEntity, ICapabilityProvider, VarNameable {
29+
public abstract class PeripheralBlockEntity<T extends BasePeripheral<?>> extends BaseContainerBlockEntity implements WorldlyContainer, IPeripheralBlockEntity, BlockCapabilityProviders.ItemHandler, BlockCapabilityProviders.Peripheral, VarNameable {
3230
private static final String PERIPHERAL_SETTINGS_KEY = "peripheralSettings";
3331
protected CompoundTag peripheralSettings = new CompoundTag();
3432
protected NonNullList<ItemStack> items;
3533
private IItemHandler itemHandler = null;
36-
private IFluidHandler fluidHandler = null;
3734
private IPeripheral peripheral = null;
3835

3936
protected PeripheralBlockEntity(BlockEntityType<?> tileEntityTypeIn, BlockPos pos, BlockState state) {
@@ -59,15 +56,6 @@ public IItemHandler createItemHandlerCap(@Nullable Direction side) {
5956
return this.itemHandler;
6057
}
6158

62-
@Override
63-
@NotNull
64-
public IFluidHandler createFluidHandlerCap(@Nullable Direction side) {
65-
if (this.fluidHandler == null) {
66-
this.fluidHandler = new FluidTank(0);
67-
}
68-
return this.fluidHandler;
69-
}
70-
7159
@Override
7260
@NotNull
7361
public IPeripheral createPeripheralCap(@Nullable Direction side) {

src/main/java/de/srendi/advancedperipherals/common/blocks/base/PoweredPeripheralBlockEntity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
import org.jetbrains.annotations.NotNull;
1414
import org.jetbrains.annotations.Nullable;
1515

16-
public abstract class PoweredPeripheralBlockEntity<T extends BasePeripheral<?>> extends PeripheralBlockEntity<T> {
16+
public abstract class PoweredPeripheralBlockEntity<T extends BasePeripheral<?>> extends PeripheralBlockEntity<T> implements BlockCapabilityProviders.EnergyStorage {
1717

1818
private final IEnergyStorage energyStorage;
1919

src/main/java/de/srendi/advancedperipherals/common/blocks/blockentities/EnergyDetectorEntity.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,20 @@
22

33
import de.srendi.advancedperipherals.common.addons.computercraft.peripheral.EnergyDetectorPeripheral;
44
import de.srendi.advancedperipherals.common.blocks.base.BaseDetectorEntity;
5+
import de.srendi.advancedperipherals.common.blocks.base.BlockCapabilityProviders;
56
import de.srendi.advancedperipherals.common.configuration.APConfig;
67
import de.srendi.advancedperipherals.common.setup.APBlockEntityTypes;
78
import de.srendi.advancedperipherals.common.util.proxy.EnergyStorageProxy;
89
import net.minecraft.core.BlockPos;
10+
import net.minecraft.core.Direction;
911
import net.minecraft.world.level.block.state.BlockState;
1012
import net.neoforged.neoforge.capabilities.Capabilities;
1113
import net.neoforged.neoforge.energy.EnergyStorage;
1214
import net.neoforged.neoforge.energy.IEnergyStorage;
1315
import org.jetbrains.annotations.NotNull;
16+
import org.jetbrains.annotations.Nullable;
1417

15-
public class EnergyDetectorEntity extends BaseDetectorEntity<IEnergyStorage, EnergyStorageProxy, EnergyDetectorPeripheral> {
18+
public class EnergyDetectorEntity extends BaseDetectorEntity<IEnergyStorage, EnergyStorageProxy, EnergyDetectorPeripheral> implements BlockCapabilityProviders.EnergyStorage {
1619

1720
private static final EnergyStorage ZERO_STORAGE = new EnergyStorage(0, 0, 0);
1821

@@ -37,4 +40,10 @@ protected EnergyStorageProxy createProxy() {
3740
protected IEnergyStorage getZeroStorage() {
3841
return ZERO_STORAGE;
3942
}
43+
44+
@Override
45+
@Nullable
46+
public IEnergyStorage createEnergyStorageCap(@Nullable Direction side) {
47+
return this.getCapability(side);
48+
}
4049
}

src/main/java/de/srendi/advancedperipherals/common/blocks/blockentities/FluidDetectorEntity.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,20 @@
22

33
import de.srendi.advancedperipherals.common.addons.computercraft.peripheral.FluidDetectorPeripheral;
44
import de.srendi.advancedperipherals.common.blocks.base.BaseDetectorEntity;
5+
import de.srendi.advancedperipherals.common.blocks.base.BlockCapabilityProviders;
56
import de.srendi.advancedperipherals.common.configuration.APConfig;
67
import de.srendi.advancedperipherals.common.setup.APBlockEntityTypes;
78
import de.srendi.advancedperipherals.common.util.proxy.FluidStorageProxy;
89
import net.minecraft.core.BlockPos;
10+
import net.minecraft.core.Direction;
911
import net.minecraft.world.level.block.state.BlockState;
1012
import net.neoforged.neoforge.capabilities.Capabilities;
1113
import net.neoforged.neoforge.fluids.capability.IFluidHandler;
1214
import net.neoforged.neoforge.fluids.capability.templates.FluidTank;
1315
import org.jetbrains.annotations.NotNull;
16+
import org.jetbrains.annotations.Nullable;
1417

15-
public class FluidDetectorEntity extends BaseDetectorEntity<IFluidHandler, FluidStorageProxy, FluidDetectorPeripheral> {
18+
public class FluidDetectorEntity extends BaseDetectorEntity<IFluidHandler, FluidStorageProxy, FluidDetectorPeripheral> implements BlockCapabilityProviders.FluidHandler {
1619

1720
private static final FluidTank ZERO_STORAGE = new FluidTank(0);
1821

@@ -37,4 +40,10 @@ protected FluidStorageProxy createProxy() {
3740
protected IFluidHandler getZeroStorage() {
3841
return ZERO_STORAGE;
3942
}
43+
44+
@Override
45+
@Nullable
46+
public IFluidHandler createFluidHandlerCap(@Nullable Direction side) {
47+
return this.getCapability(side);
48+
}
4049
}

src/main/java/de/srendi/advancedperipherals/common/blocks/blockentities/GasDetectorEntity.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,24 @@
22

33
import de.srendi.advancedperipherals.common.addons.computercraft.peripheral.GasDetectorPeripheral;
44
import de.srendi.advancedperipherals.common.blocks.base.BaseDetectorEntity;
5+
import de.srendi.advancedperipherals.common.blocks.base.BlockCapabilityProviders;
56
import de.srendi.advancedperipherals.common.configuration.APConfig;
67
import de.srendi.advancedperipherals.common.setup.APBlockEntityTypes;
78
import de.srendi.advancedperipherals.common.util.proxy.GasStorageProxy;
89
import de.srendi.advancedperipherals.common.util.proxy.ZeroGasTank;
910
import mekanism.api.chemical.IChemicalHandler;
1011
import mekanism.common.capabilities.Capabilities;
1112
import net.minecraft.core.BlockPos;
13+
import net.minecraft.core.Direction;
1214
import net.minecraft.world.level.block.state.BlockState;
1315
import org.jetbrains.annotations.NotNull;
16+
import org.jetbrains.annotations.Nullable;
1417

15-
public class GasDetectorEntity extends BaseDetectorEntity<IChemicalHandler, GasStorageProxy, GasDetectorPeripheral> {
18+
public class GasDetectorEntity extends BaseDetectorEntity<IChemicalHandler, GasStorageProxy, GasDetectorPeripheral> implements BlockCapabilityProviders.ChemicalHandler {
1619

17-
// a zero size, zero transfer gas storage to ensure that cables connect
1820
private static final IChemicalHandler ZERO_STORAGE = new ZeroGasTank();
1921

2022
public GasDetectorEntity(BlockPos pos, BlockState state) {
21-
//TODO: Does still not work, transfers chemicals but without a rate limit and without monitoring the transfer rate
2223
super(APBlockEntityTypes.GAS_DETECTOR.get(), pos, state, Capabilities.CHEMICAL.block());
2324
}
2425

@@ -39,4 +40,10 @@ public GasStorageProxy createProxy() {
3940
protected IChemicalHandler getZeroStorage() {
4041
return ZERO_STORAGE;
4142
}
43+
44+
@Override
45+
@Nullable
46+
public Object createChemicalHandlerCap(@Nullable Direction side) {
47+
return this.getCapability(side);
48+
}
4249
}

0 commit comments

Comments
 (0)