Skip to content

Commit 0b41d25

Browse files
committed
Tunnels: force existing tunnel blocks to unset, to be readded in 1.17
1 parent b9e452c commit 0b41d25

File tree

16 files changed

+118
-270
lines changed

16 files changed

+118
-270
lines changed

src/main/java/dev/compactmods/machines/advancement/trigger/ClaimedMachineTrigger.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import com.google.gson.JsonObject;
44
import dev.compactmods.machines.advancement.GenericAdvancementTriggerListener;
55
import dev.compactmods.machines.advancement.GenericAdvancementTriggerListenerList;
6-
import dev.compactmods.machines.api.core.Advancements;
76
import net.minecraft.advancements.ICriterionTrigger;
87
import net.minecraft.advancements.PlayerAdvancements;
98
import net.minecraft.advancements.criterion.CriterionInstance;

src/main/java/dev/compactmods/machines/api/core/Tooltips.java

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

src/main/java/dev/compactmods/machines/block/BlockCompactMachine.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
import net.minecraft.block.AbstractBlock;
1818
import net.minecraft.block.Block;
1919
import net.minecraft.block.BlockState;
20-
import net.minecraft.entity.Entity;
2120
import net.minecraft.entity.LivingEntity;
2221
import net.minecraft.entity.player.PlayerEntity;
2322
import net.minecraft.entity.player.ServerPlayerEntity;
@@ -32,7 +31,6 @@
3231
import net.minecraft.util.math.BlockRayTraceResult;
3332
import net.minecraft.util.math.RayTraceResult;
3433
import net.minecraft.world.IBlockReader;
35-
import net.minecraft.world.IWorld;
3634
import net.minecraft.world.World;
3735
import net.minecraft.world.server.ServerWorld;
3836

src/main/java/dev/compactmods/machines/block/tiles/CompactMachineTile.java

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

33
import javax.annotation.Nonnull;
44
import javax.annotation.Nullable;
5-
import java.util.HashSet;
65
import java.util.Optional;
76
import java.util.Set;
87
import java.util.UUID;
@@ -19,8 +18,6 @@
1918
import dev.compactmods.machines.tunnels.TunnelHelper;
2019
import net.minecraft.block.BlockState;
2120
import net.minecraft.nbt.CompoundNBT;
22-
import net.minecraft.nbt.ListNBT;
23-
import net.minecraft.nbt.StringNBT;
2421
import net.minecraft.network.NetworkManager;
2522
import net.minecraft.network.play.server.SUpdateTileEntityPacket;
2623
import net.minecraft.server.MinecraftServer;
@@ -33,9 +30,7 @@
3330
import net.minecraft.world.server.ServerWorld;
3431
import net.minecraftforge.common.capabilities.Capability;
3532
import net.minecraftforge.common.capabilities.ICapabilityProvider;
36-
import net.minecraftforge.common.util.Constants;
3733
import net.minecraftforge.common.util.LazyOptional;
38-
import net.minecraftforge.common.world.ForgeChunkManager;
3934

4035
public class CompactMachineTile extends TileEntity implements ICapabilityProvider, ITickableTileEntity {
4136
public int machineId = -1;
@@ -134,41 +129,6 @@ public CompoundNBT save(CompoundNBT nbt) {
134129
return nbt;
135130
}
136131

137-
@Nonnull
138-
@Override
139-
public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, @Nullable Direction side) {
140-
if (level.isClientSide())
141-
return super.getCapability(cap, side);
142-
143-
ServerWorld serverWorld = (ServerWorld) level;
144-
ServerWorld compactWorld = serverWorld.getServer().getLevel(Registration.COMPACT_DIMENSION);
145-
if (compactWorld == null)
146-
return LazyOptional.empty();
147-
148-
Set<BlockPos> tunnelPositions = TunnelHelper.getTunnelsForMachineSide(this.machineId, serverWorld, side);
149-
if (tunnelPositions.isEmpty())
150-
return LazyOptional.empty();
151-
152-
for (BlockPos possibleTunnel : tunnelPositions) {
153-
TunnelWallTile tile = (TunnelWallTile) compactWorld.getBlockEntity(possibleTunnel);
154-
if (tile == null)
155-
continue;
156-
157-
Optional<TunnelDefinition> tunnel = tile.getTunnelDefinition();
158-
if (!tunnel.isPresent())
159-
continue;
160-
161-
TunnelDefinition definition = tunnel.get();
162-
if (definition instanceof ICapableTunnel) {
163-
LazyOptional<T> capPoss = ((ICapableTunnel) definition).getInternalCapability(compactWorld, possibleTunnel, cap, side);
164-
if (capPoss.isPresent())
165-
return capPoss;
166-
}
167-
}
168-
169-
return LazyOptional.empty();
170-
}
171-
172132
@Nullable
173133
@Override
174134
public SUpdateTileEntityPacket getUpdatePacket() {

src/main/java/dev/compactmods/machines/block/tiles/TunnelWallTile.java

Lines changed: 21 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package dev.compactmods.machines.block.tiles;
22

33
import dev.compactmods.machines.CompactMachines;
4+
import dev.compactmods.machines.api.teleportation.IDimensionalPosition;
5+
import dev.compactmods.machines.api.tunnels.EnumTunnelSide;
46
import dev.compactmods.machines.api.tunnels.ICapableTunnel;
57
import dev.compactmods.machines.api.tunnels.TunnelDefinition;
68
import dev.compactmods.machines.block.walls.TunnelWallBlock;
@@ -10,9 +12,11 @@
1012
import dev.compactmods.machines.network.NetworkHandler;
1113
import dev.compactmods.machines.network.TunnelAddedPacket;
1214
import dev.compactmods.machines.teleportation.DimensionalPosition;
15+
import dev.compactmods.machines.tunnels.TunnelHelper;
1316
import net.minecraft.block.BlockState;
1417
import net.minecraft.nbt.CompoundNBT;
1518
import net.minecraft.server.MinecraftServer;
19+
import net.minecraft.tileentity.ITickableTileEntity;
1620
import net.minecraft.tileentity.TileEntity;
1721
import net.minecraft.util.Direction;
1822
import net.minecraft.util.ResourceLocation;
@@ -24,19 +28,27 @@
2428
import net.minecraftforge.common.util.LazyOptional;
2529
import net.minecraftforge.fml.common.registry.GameRegistry;
2630
import net.minecraftforge.fml.network.PacketDistributor;
31+
import net.minecraftforge.items.CapabilityItemHandler;
32+
import net.minecraftforge.items.IItemHandler;
33+
import net.minecraftforge.items.ItemStackHandler;
2734

2835
import javax.annotation.Nonnull;
2936
import javax.annotation.Nullable;
3037
import java.util.Collection;
38+
import java.util.HashMap;
39+
import java.util.Map;
3140
import java.util.Optional;
3241

33-
public class TunnelWallTile extends TileEntity {
42+
public class TunnelWallTile extends TileEntity implements ITickableTileEntity {
3443

3544
private int connectedMachine;
3645
private ResourceLocation tunnelType;
3746

47+
private final HashMap<Capability<?>, LazyOptional<?>> capabilityCache;
48+
3849
public TunnelWallTile() {
3950
super(Registration.TUNNEL_WALL_TILE.get());
51+
this.capabilityCache = new HashMap<>();
4052
}
4153

4254
@Override
@@ -82,38 +94,8 @@ public void handleUpdateTag(BlockState state, CompoundNBT tag) {
8294
}
8395
}
8496

85-
public Optional<DimensionalPosition> getConnectedPosition() {
86-
if (level == null || level.isClientSide())
87-
return Optional.empty();
88-
89-
ServerWorld serverWorld = (ServerWorld) level;
90-
MinecraftServer serv = serverWorld.getServer();
91-
92-
MachineConnections connections = MachineConnections.get(serv);
93-
CompactMachineData extern = CompactMachineData.get(serv);
94-
if (connections == null || extern == null)
95-
return Optional.empty();
96-
97-
if (this.connectedMachine <= 0) {
98-
Optional<Integer> mid = tryFindExternalMachineByChunkPos(connections);
99-
100-
// Map the results - either it found an ID and we can map, or it found nothing
101-
return mid.map(i -> {
102-
this.connectedMachine = i;
103-
Optional<DimensionalPosition> pos = extern.getMachineLocation(i);
104-
return pos.map(p -> {
105-
BlockPos bumped = p.getBlockPosition().relative(getConnectedSide(), 1);
106-
return new DimensionalPosition(p.getDimension(), bumped);
107-
}).orElse(null);
108-
});
109-
}
110-
111-
Optional<DimensionalPosition> pos = extern.getMachineLocation(this.connectedMachine);
112-
return pos.map(p -> {
113-
BlockPos bumped = p.getBlockPosition().relative(getConnectedSide(), 1);
114-
DimensionalPosition bdp = new DimensionalPosition(p.getDimension(), bumped);
115-
return bdp;
116-
});
97+
public Optional<IDimensionalPosition> getConnectedPosition() {
98+
return Optional.empty();
11799
}
118100

119101
private Optional<Integer> tryFindExternalMachineByChunkPos(MachineConnections connections) {
@@ -172,33 +154,6 @@ public Optional<TunnelDefinition> getTunnelDefinition() {
172154
return Optional.ofNullable(definition);
173155
}
174156

175-
@Nonnull
176-
@Override
177-
public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap) {
178-
return LazyOptional.empty();
179-
}
180-
181-
@Nonnull
182-
@Override
183-
public <T> LazyOptional<T> getCapability(@Nonnull Capability<T> cap, @Nullable Direction side) {
184-
Optional<TunnelDefinition> tunnelDef = getTunnelDefinition();
185-
186-
// If we don't have a definition for the tunnel, skip
187-
if (!tunnelDef.isPresent())
188-
return super.getCapability(cap, side);
189-
190-
// loop through tunnel definition for capabilities
191-
TunnelDefinition definition = tunnelDef.get();
192-
if (definition instanceof ICapableTunnel) {
193-
if (!level.isClientSide) {
194-
ServerWorld sw = (ServerWorld) level;
195-
return ((ICapableTunnel) definition).getExternalCapability(sw, worldPosition, cap, side);
196-
}
197-
}
198-
199-
return super.getCapability(cap, side);
200-
}
201-
202157
public void setTunnelType(ResourceLocation registryName) {
203158
this.tunnelType = registryName;
204159

@@ -212,4 +167,10 @@ public void setTunnelType(ResourceLocation registryName) {
212167
.send(PacketDistributor.TRACKING_CHUNK.with(() -> chunkAt), pkt);
213168
}
214169
}
170+
171+
@Override
172+
public void tick() {
173+
// first tick - unset this block, tunnels will be reimplemented in 1.17
174+
level.setBlockAndUpdate(worldPosition, Registration.BLOCK_SOLID_WALL.get().defaultBlockState());
175+
}
215176
}

src/main/java/dev/compactmods/machines/block/walls/TunnelWallBlock.java

Lines changed: 2 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import net.minecraft.util.math.BlockRayTraceResult;
2727
import net.minecraft.world.IBlockReader;
2828
import net.minecraft.world.World;
29+
import net.minecraft.world.server.ServerWorld;
2930

3031
import javax.annotation.Nullable;
3132
import java.util.Optional;
@@ -55,22 +56,12 @@ public Optional<TunnelDefinition> getTunnelInfo(IBlockReader world, BlockPos pos
5556

5657
@Override
5758
public boolean canConnectRedstone(BlockState state, IBlockReader world, BlockPos pos, @Nullable Direction side) {
58-
Optional<TunnelDefinition> tunnelInfo = getTunnelInfo(world, pos);
59-
if (!tunnelInfo.isPresent())
60-
return false;
61-
62-
TunnelDefinition definition = tunnelInfo.get();
63-
if (definition instanceof IRedstoneReaderTunnel) {
64-
ITunnelConnectionInfo conn = TunnelHelper.generateConnectionInfo(world, pos);
65-
return ((IRedstoneReaderTunnel) definition).canConnectRedstone(conn);
66-
}
67-
6859
return false;
6960
}
7061

7162
@Override
7263
public boolean isSignalSource(BlockState state) {
73-
return state.getValue(REDSTONE);
64+
return false;
7465
}
7566

7667
@Override
@@ -94,44 +85,6 @@ public int getSignal(BlockState state, IBlockReader world, BlockPos pos, Directi
9485
return 0;
9586
}
9687

97-
@Override
98-
public ActionResultType use(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, BlockRayTraceResult hit) {
99-
if (worldIn.isClientSide())
100-
return ActionResultType.SUCCESS;
101-
102-
103-
if (player.isShiftKeyDown()) {
104-
Optional<TunnelDefinition> tunnelDef = getTunnelInfo(worldIn, pos);
105-
106-
if (!tunnelDef.isPresent())
107-
return ActionResultType.FAIL;
108-
109-
BlockState solidWall = Registration.BLOCK_SOLID_WALL.get().defaultBlockState();
110-
111-
worldIn.setBlockAndUpdate(pos, solidWall);
112-
113-
TunnelDefinition tunnelRegistration = tunnelDef.get();
114-
ItemStack stack = new ItemStack(Registration.ITEM_TUNNEL.get(), 1);
115-
CompoundNBT defTag = stack.getOrCreateTagElement("definition");
116-
defTag.putString("id", tunnelRegistration.getRegistryName().toString());
117-
118-
ItemEntity ie = new ItemEntity(worldIn, player.getX(), player.getY(), player.getZ(), stack);
119-
worldIn.addFreshEntity(ie);
120-
121-
// IFormattableTextComponent t = new StringTextComponent(tunnelRegistration.getRegistryName().toString())
122-
// .mergeStyle(TextFormatting.GRAY);
123-
//
124-
// player.sendStatusMessage(t, true);
125-
} else {
126-
// Rotate tunnel
127-
Direction dir = state.getValue(CONNECTED_SIDE);
128-
Direction nextDir = TunnelHelper.getNextDirection(dir);
129-
130-
worldIn.setBlockAndUpdate(pos, state.setValue(CONNECTED_SIDE, nextDir));
131-
}
132-
return ActionResultType.SUCCESS;
133-
}
134-
13588
@Override
13689
protected void createBlockStateDefinition(StateContainer.Builder<Block, BlockState> builder) {
13790
builder.add(TUNNEL_SIDE).add(CONNECTED_SIDE).add(REDSTONE);

src/main/java/dev/compactmods/machines/compat/jei/CompactMachinesJeiPlugin.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import mezz.jei.api.IModPlugin;
1212
import mezz.jei.api.JeiPlugin;
1313
import mezz.jei.api.constants.VanillaTypes;
14-
import mezz.jei.api.ingredients.IIngredientType;
1514
import mezz.jei.api.registration.IRecipeRegistration;
1615
import mezz.jei.api.registration.ISubtypeRegistration;
1716
import mezz.jei.api.runtime.IJeiRuntime;

src/main/java/dev/compactmods/machines/compat/theoneprobe/providers/TunnelProvider.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package dev.compactmods.machines.compat.theoneprobe.providers;
22

33
import dev.compactmods.machines.CompactMachines;
4+
import dev.compactmods.machines.api.teleportation.IDimensionalPosition;
45
import dev.compactmods.machines.api.tunnels.TunnelDefinition;
56
import dev.compactmods.machines.block.tiles.TunnelWallTile;
67
import dev.compactmods.machines.block.walls.TunnelWallBlock;
@@ -49,7 +50,7 @@ private static void addProbeInfo(ProbeMode probeMode, IProbeInfo info, PlayerEnt
4950
if (tile == null)
5051
return;
5152

52-
Optional<DimensionalPosition> outside = TunnelHelper.getTunnelConnectedPosition(tile, EnumTunnelSide.OUTSIDE);
53+
Optional<IDimensionalPosition> outside = TunnelHelper.getTunnelConnectedPosition(tile, EnumTunnelSide.OUTSIDE);
5354
Optional<BlockState> connected = TunnelHelper.getConnectedState(tile, EnumTunnelSide.OUTSIDE);
5455

5556
if (probeMode == ProbeMode.EXTENDED) {
@@ -92,7 +93,7 @@ private static void addProbeInfo(ProbeMode probeMode, IProbeInfo info, PlayerEnt
9293
if (!outside.isPresent())
9394
return;
9495

95-
DimensionalPosition outPos = outside.get();
96+
IDimensionalPosition outPos = outside.get();
9697
ServerWorld connectedWorld = (ServerWorld) world;
9798
BlockPos outPosBlock = outPos.getBlockPosition();
9899

0 commit comments

Comments
 (0)