Skip to content

Commit d4e103c

Browse files
committed
final RiftConfigurationToolItem iteration for now
1 parent caa8e1f commit d4e103c

4 files changed

Lines changed: 140 additions & 25 deletions

File tree

src/main/java/org/dimdev/dimdoors/DimensionalDoorsInitializer.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,22 @@
11
package org.dimdev.dimdoors;
22

3-
import java.io.IOException;
3+
import java.util.HashMap;
4+
import java.util.Map;
5+
import java.util.UUID;
46

57
import me.sargunvohra.mcmods.autoconfig1u.ConfigHolder;
8+
import net.fabricmc.fabric.api.event.player.AttackBlockCallback;
9+
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
10+
import net.minecraft.server.network.ServerPlayNetworkHandler;
611
import org.dimdev.dimdoors.block.ModBlocks;
712
import org.dimdev.dimdoors.block.entity.ModBlockEntityTypes;
813
import org.dimdev.dimdoors.command.ModCommands;
914
import org.dimdev.dimdoors.entity.ModEntityTypes;
1015
import org.dimdev.dimdoors.entity.stat.ModStats;
1116
import org.dimdev.dimdoors.fluid.ModFluids;
1217
import org.dimdev.dimdoors.item.ModItems;
18+
import org.dimdev.dimdoors.item.RiftConfigurationToolItem;
19+
import org.dimdev.dimdoors.network.c2s.HitBlockS2CPacket;
1320
import org.dimdev.dimdoors.particle.ModParticleTypes;
1421
import org.dimdev.dimdoors.pockets.SchematicHandler;
1522
import org.dimdev.dimdoors.pockets.SchematicV2Handler;
@@ -32,13 +39,13 @@
3239

3340
import net.fabricmc.api.ModInitializer;
3441
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents;
35-
import net.fabricmc.loader.api.FabricLoader;
3642

3743
public class DimensionalDoorsInitializer implements ModInitializer {
3844
public static final Identifier MONOLITH_PARTICLE_PACKET = new Identifier("dimdoors", "monolith_particle_packet");
3945
public static ConfigHolder<ModConfig> CONFIG_MANAGER;
4046
public static ModConfig CONFIG;
4147

48+
private static Map<UUID, ServerPlayNetworkHandler> UUID_SERVER_PLAY_NETWORK_HANDLER_MAP = new HashMap<>();
4249
private static MinecraftServer server;
4350

4451
@NotNull
@@ -84,5 +91,10 @@ public void onInitialize() {
8491

8592
SchematicV2Handler.getInstance().load();
8693
SchematicHandler.INSTANCE.loadSchematics();
94+
95+
96+
AttackBlockCallback.EVENT.register(RiftConfigurationToolItem::onAttackBlockCallback);
97+
98+
ServerPlayNetworking.registerGlobalReceiver(HitBlockS2CPacket.ID, RiftConfigurationToolItem::receiveHitBlock);
8799
}
88100
}

src/main/java/org/dimdev/dimdoors/item/RiftConfigurationToolItem.java

Lines changed: 60 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,20 @@
33
import java.io.IOException;
44
import java.util.List;
55

6+
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
67
import net.fabricmc.fabric.api.networking.v1.PacketByteBufs;
8+
import net.fabricmc.fabric.api.networking.v1.PacketSender;
79
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
10+
import net.minecraft.block.entity.BlockEntity;
811
import net.minecraft.network.PacketByteBuf;
12+
import net.minecraft.server.MinecraftServer;
13+
import net.minecraft.server.network.ServerPlayNetworkHandler;
914
import net.minecraft.server.network.ServerPlayerEntity;
1015
import net.minecraft.util.hit.BlockHitResult;
16+
import net.minecraft.util.math.BlockPos;
17+
import net.minecraft.util.math.Direction;
1118
import org.apache.logging.log4j.LogManager;
1219
import org.apache.logging.log4j.Logger;
13-
import org.dimdev.dimdoors.DimensionalDoorsInitializer;
1420
import org.dimdev.dimdoors.block.entity.RiftBlockEntity;
1521

1622
import net.minecraft.client.item.TooltipContext;
@@ -27,6 +33,7 @@
2733
import net.minecraft.world.World;
2834

2935
import net.fabricmc.api.Environment;
36+
import org.dimdev.dimdoors.network.c2s.HitBlockS2CPacket;
3037
import org.dimdev.dimdoors.network.s2c.PlayerInventorySlotUpdateS2CPacket;
3138
import org.dimdev.dimdoors.rift.targets.IdMarker;
3239
import org.dimdev.dimdoors.util.EntityUtils;
@@ -49,18 +56,14 @@ public TypedActionResult<ItemStack> use(World world, PlayerEntity player, Hand h
4956
HitResult hit = player.raycast(RaycastHelper.REACH_DISTANCE, 0, false);
5057

5158
if (world.isClient) {
52-
if (!RaycastHelper.hitsRift(hit, world)) {
53-
EntityUtils.chat(player, new TranslatableText("tools.rift_miss"));
54-
RiftBlockEntity.showRiftCoreUntil = System.currentTimeMillis() + DimensionalDoorsInitializer.CONFIG.getGraphicsConfig().highlightRiftCoreFor;
55-
}
56-
return new TypedActionResult<>(ActionResult.FAIL, stack);
59+
return TypedActionResult.fail(stack);
5760
} else {
5861
Counter counter = Counter.get(stack);
5962

6063
if (RaycastHelper.hitsRift(hit, world)) {
6164
RiftBlockEntity rift = (RiftBlockEntity) world.getBlockEntity(((BlockHitResult) hit).getBlockPos());
6265

63-
if (rift.getDestination() instanceof IdMarker) {
66+
if (rift.getDestination() instanceof IdMarker && ((IdMarker) rift.getDestination()).getId() >= 0) {
6467
EntityUtils.chat(player, Text.of("Id: " + ((IdMarker) rift.getDestination()).getId()));
6568
} else {
6669
int id = counter.increment();
@@ -70,21 +73,63 @@ public TypedActionResult<ItemStack> use(World world, PlayerEntity player, Hand h
7073
rift.setDestination(new IdMarker(id));
7174
}
7275

73-
return new TypedActionResult<>(ActionResult.SUCCESS, stack);
76+
return TypedActionResult.success(stack);
7477
} else {
75-
if(player.isSneaking()) {
76-
counter.set(-1);
77-
sync(stack, player, hand);
78-
EntityUtils.chat(player, Text.of("Counter has been reset."));
79-
} else {
80-
EntityUtils.chat(player, Text.of("Current Count: " + counter.count()));
78+
EntityUtils.chat(player, Text.of("Current Count: " + counter.count()));
79+
}
80+
}
81+
82+
return TypedActionResult.success(stack);
83+
}
84+
85+
public static ActionResult onAttackBlockCallback(PlayerEntity player, World world, Hand hand, BlockPos pos, Direction direction) {
86+
if (world.isClient && player.isSneaking() && player.getStackInHand(hand).getItem() instanceof RiftConfigurationToolItem) {
87+
if(Counter.get(player.getStackInHand(hand)).count() != -1 || world.getBlockEntity(pos) instanceof RiftBlockEntity) {
88+
HitBlockS2CPacket packet = new HitBlockS2CPacket(hand, pos, direction);
89+
try {
90+
PacketByteBuf buf = PacketByteBufs.create();
91+
packet.write(buf);
92+
ClientPlayNetworking.send(HitBlockS2CPacket.ID, buf);
93+
} catch (IOException e) {
94+
LOGGER.error(e);
95+
return ActionResult.FAIL;
8196
}
8297
}
98+
return ActionResult.SUCCESS;
8399
}
100+
return ActionResult.PASS;
101+
}
84102

85-
return new TypedActionResult<>(ActionResult.SUCCESS, stack);
103+
public static void receiveHitBlock(MinecraftServer server, ServerPlayerEntity player, ServerPlayNetworkHandler networkHandler, PacketByteBuf buf, PacketSender sender) {
104+
HitBlockS2CPacket packet = new HitBlockS2CPacket();
105+
try {
106+
packet.read(buf);
107+
server.execute(() -> serverThreadReceiveHitBlock(player, packet.getHand(), packet.getPos()));
108+
} catch (IOException e) {
109+
LOGGER.error(e);
110+
}
111+
}
112+
113+
private static void serverThreadReceiveHitBlock(ServerPlayerEntity player, Hand hand, BlockPos pos) {
114+
ItemStack stack = player.getStackInHand(hand);
115+
if (player.isSneaking() && stack.getItem() instanceof RiftConfigurationToolItem) {
116+
BlockEntity blockEntity = player.getServerWorld().getBlockEntity(pos);
117+
if (blockEntity instanceof RiftBlockEntity) {
118+
RiftBlockEntity rift = (RiftBlockEntity) blockEntity;
119+
if (!(rift.getDestination() instanceof IdMarker) || ((IdMarker) rift.getDestination()).getId() != -1) {
120+
rift.setDestination(new IdMarker(-1));
121+
EntityUtils.chat(player, Text.of("Rift stripped of data and set to invalid id: -1"));
122+
}
123+
} else if (Counter.get(stack).count() != -1){
124+
Counter.get(stack).set(-1);
125+
((RiftConfigurationToolItem) stack.getItem()).sync(stack, player, hand);
126+
127+
EntityUtils.chat(player, Text.of("Counter has been reset."));
128+
}
129+
}
86130
}
87131

132+
88133
@Override
89134
@Environment(CLIENT)
90135
public void appendTooltip(ItemStack itemStack, World world, List<Text> list, TooltipContext tooltipContext) {
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package org.dimdev.dimdoors.network.c2s;
2+
3+
import net.fabricmc.api.EnvType;
4+
import net.fabricmc.api.Environment;
5+
import net.minecraft.network.Packet;
6+
import net.minecraft.network.PacketByteBuf;
7+
import net.minecraft.network.listener.ClientPlayPacketListener;
8+
import net.minecraft.util.Hand;
9+
import net.minecraft.util.Identifier;
10+
import net.minecraft.util.math.BlockPos;
11+
import net.minecraft.util.math.Direction;
12+
13+
import java.io.IOException;
14+
15+
// TODO: replace ClientPlayPackListener
16+
public class HitBlockS2CPacket implements Packet<ClientPlayPacketListener> {
17+
public static Identifier ID = new Identifier("dimdoors:hit_block");
18+
19+
private Hand hand;
20+
private BlockPos pos;
21+
private Direction direction;
22+
23+
24+
public HitBlockS2CPacket() {
25+
26+
}
27+
28+
@Environment(EnvType.CLIENT)
29+
public HitBlockS2CPacket(Hand hand, BlockPos pos, Direction direction) {
30+
this.hand = hand;
31+
this.pos = pos;
32+
this.direction = direction;
33+
}
34+
35+
@Override
36+
public void read(PacketByteBuf buf) throws IOException {
37+
hand = buf.readEnumConstant(Hand.class);
38+
pos = buf.readBlockPos();
39+
direction = buf.readEnumConstant(Direction.class);
40+
}
41+
42+
@Override
43+
public void write(PacketByteBuf buf) throws IOException {
44+
buf.writeEnumConstant(hand);
45+
buf.writeBlockPos(pos);
46+
buf.writeEnumConstant(direction);
47+
}
48+
49+
@Override
50+
public void apply(ClientPlayPacketListener listener) {
51+
// TODO: write method
52+
}
53+
54+
55+
public Hand getHand() {
56+
return hand;
57+
}
58+
59+
public BlockPos getPos() {
60+
return pos;
61+
}
62+
63+
public Direction getDirection() {
64+
return direction;
65+
}
66+
}

src/main/java/org/dimdev/dimdoors/pockets/modifier/RiftDataModifier.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,14 @@
11
package org.dimdev.dimdoors.pockets.modifier;
22

33
import java.nio.ByteBuffer;
4-
import java.util.Arrays;
54
import java.util.HashMap;
65
import java.util.List;
76
import java.util.Map;
87
import java.util.function.Consumer;
98
import java.util.stream.Collectors;
109
import java.util.stream.IntStream;
11-
import java.util.stream.Stream;
12-
13-
import org.apache.commons.lang3.ArrayUtils;
14-
import org.apache.logging.log4j.LogManager;
15-
import org.apache.logging.log4j.Logger;
1610

1711
import net.minecraft.nbt.CompoundTag;
18-
import net.minecraft.nbt.IntTag;
19-
import net.minecraft.nbt.ListTag;
2012

2113
import net.fabricmc.fabric.api.util.NbtType;
2214
import org.dimdev.dimdoors.block.entity.RiftBlockEntity;

0 commit comments

Comments
 (0)