fix RiftConfigurationToolItem counter
This commit is contained in:
parent
0ace3ffa76
commit
25bc8caeab
6 changed files with 138 additions and 15 deletions
|
@ -1,26 +1,27 @@
|
|||
package org.dimdev.dimdoors;
|
||||
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.dimdev.dimdoors.block.ModBlocks;
|
||||
import org.dimdev.dimdoors.block.entity.ModBlockEntityTypes;
|
||||
import org.dimdev.dimdoors.client.ModSkyRendering;
|
||||
import org.dimdev.dimdoors.entity.ModEntityTypes;
|
||||
import org.dimdev.dimdoors.entity.MonolithEntity;
|
||||
import org.dimdev.dimdoors.fluid.ModFluids;
|
||||
import org.dimdev.dimdoors.network.s2c.PlayerInventorySlotUpdateS2CPacket;
|
||||
import org.dimdev.dimdoors.particle.ModParticleTypes;
|
||||
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.network.ClientPlayNetworkHandler;
|
||||
import net.minecraft.network.PacketByteBuf;
|
||||
|
||||
import net.fabricmc.api.ClientModInitializer;
|
||||
import net.fabricmc.api.EnvType;
|
||||
import net.fabricmc.api.Environment;
|
||||
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
|
||||
import net.fabricmc.fabric.api.network.ClientSidePacketRegistry;
|
||||
import net.fabricmc.fabric.api.networking.v1.PacketSender;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
@Environment(EnvType.CLIENT)
|
||||
public class DimensionalDoorsClientInitializer implements ClientModInitializer {
|
||||
private static final Logger LOGGER = LogManager.getLogger();
|
||||
@Override
|
||||
public void onInitializeClient() {
|
||||
ModEntityTypes.initClient();
|
||||
|
@ -31,5 +32,18 @@ public class DimensionalDoorsClientInitializer implements ClientModInitializer {
|
|||
ModParticleTypes.initClient();
|
||||
|
||||
ClientPlayNetworking.registerGlobalReceiver(DimensionalDoorsInitializer.MONOLITH_PARTICLE_PACKET, (client, networkHandler, buf, sender) -> MonolithEntity.spawnParticles(buf, client));
|
||||
|
||||
// TODO: change this to a normal Receiver with the inventory network handler attached. Will have to register/ unregister when a player joins/ leaves a world
|
||||
ClientPlayNetworking.registerGlobalReceiver(PlayerInventorySlotUpdateS2CPacket.ID, (minecraftClient, clientPlayNetworkHandler, packetByteBuf, packetSender) -> {
|
||||
PlayerInventorySlotUpdateS2CPacket packet = new PlayerInventorySlotUpdateS2CPacket();
|
||||
try {
|
||||
packet.read(packetByteBuf);
|
||||
minecraftClient.player.inventory.setStack(packet.getSlot(), packet.getStack());
|
||||
// TODO: remove commented out debug code
|
||||
//LOGGER.info("Synced slot " + packet.getSlot() + " with item stack " + packet.getStack().toTag(new CompoundTag()));
|
||||
} catch (IOException e) {
|
||||
LOGGER.error(e);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,8 +1,15 @@
|
|||
package org.dimdev.dimdoors.item;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
import net.fabricmc.fabric.api.networking.v1.PacketByteBufs;
|
||||
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
|
||||
import net.minecraft.network.PacketByteBuf;
|
||||
import net.minecraft.server.network.ServerPlayerEntity;
|
||||
import net.minecraft.util.hit.BlockHitResult;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.dimdev.dimdoors.DimensionalDoorsInitializer;
|
||||
import org.dimdev.dimdoors.block.entity.RiftBlockEntity;
|
||||
|
||||
|
@ -20,6 +27,7 @@ import net.minecraft.util.hit.HitResult;
|
|||
import net.minecraft.world.World;
|
||||
|
||||
import net.fabricmc.api.Environment;
|
||||
import org.dimdev.dimdoors.network.s2c.PlayerInventorySlotUpdateS2CPacket;
|
||||
import org.dimdev.dimdoors.rift.targets.IdMarker;
|
||||
import org.dimdev.dimdoors.util.EntityUtils;
|
||||
import org.dimdev.dimdoors.world.level.Counter;
|
||||
|
@ -27,6 +35,7 @@ import org.dimdev.dimdoors.world.level.Counter;
|
|||
import static net.fabricmc.api.EnvType.CLIENT;
|
||||
|
||||
public class RiftConfigurationToolItem extends Item {
|
||||
private static final Logger LOGGER = LogManager.getLogger();
|
||||
|
||||
public static final String ID = "rift_configuration_tool";
|
||||
|
||||
|
@ -55,7 +64,8 @@ public class RiftConfigurationToolItem extends Item {
|
|||
EntityUtils.chat(player, Text.of("Id: " + ((IdMarker) rift.getDestination()).getId()));
|
||||
} else {
|
||||
int id = counter.increment();
|
||||
EntityUtils.chat(player, Text.of("Rift stripped of data and set to target id: : " + id));
|
||||
sync(stack, player, hand);
|
||||
EntityUtils.chat(player, Text.of("Rift stripped of data and set to target id: " + id));
|
||||
|
||||
rift.setDestination(new IdMarker(id));
|
||||
}
|
||||
|
@ -63,7 +73,8 @@ public class RiftConfigurationToolItem extends Item {
|
|||
return new TypedActionResult<>(ActionResult.SUCCESS, stack);
|
||||
} else {
|
||||
if(player.isSneaking()) {
|
||||
counter.clear();
|
||||
counter.set(-1);
|
||||
sync(stack, player, hand);
|
||||
EntityUtils.chat(player, Text.of("Counter has been reset."));
|
||||
} else {
|
||||
EntityUtils.chat(player, Text.of("Current Count: " + counter.count()));
|
||||
|
@ -81,4 +92,28 @@ public class RiftConfigurationToolItem extends Item {
|
|||
list.add(new TranslatableText(this.getTranslationKey() + ".info"));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemStack getDefaultStack() {
|
||||
ItemStack defaultStack = super.getDefaultStack();
|
||||
Counter.get(defaultStack).set(-1);
|
||||
return defaultStack;
|
||||
}
|
||||
|
||||
private void sync(ItemStack stack, PlayerEntity player, Hand hand) {
|
||||
ServerPlayerEntity serverPlayer = (ServerPlayerEntity) player;
|
||||
PlayerInventorySlotUpdateS2CPacket packet;
|
||||
if (hand == Hand.OFF_HAND) {
|
||||
packet = new PlayerInventorySlotUpdateS2CPacket(45, stack);
|
||||
} else {
|
||||
packet = new PlayerInventorySlotUpdateS2CPacket(serverPlayer.inventory.selectedSlot, stack);
|
||||
}
|
||||
PacketByteBuf buf = PacketByteBufs.create();
|
||||
try {
|
||||
packet.write(buf);
|
||||
ServerPlayNetworking.send(serverPlayer, PlayerInventorySlotUpdateS2CPacket.ID, buf);
|
||||
} catch (IOException e) {
|
||||
LOGGER.error(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,55 @@
|
|||
package org.dimdev.dimdoors.network.s2c;
|
||||
|
||||
import net.fabricmc.api.EnvType;
|
||||
import net.fabricmc.api.Environment;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.network.Packet;
|
||||
import net.minecraft.network.PacketByteBuf;
|
||||
import net.minecraft.network.listener.ClientPlayPacketListener;
|
||||
import net.minecraft.util.Identifier;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
// TODO: replace ClientPlayPackListener
|
||||
public class PlayerInventorySlotUpdateS2CPacket implements Packet<ClientPlayPacketListener> {
|
||||
public static Identifier ID = new Identifier("dimdoors:player_inventory_slot_update");
|
||||
|
||||
private int slot;
|
||||
private ItemStack stack;
|
||||
|
||||
public PlayerInventorySlotUpdateS2CPacket() {
|
||||
this.stack = ItemStack.EMPTY;
|
||||
}
|
||||
|
||||
public PlayerInventorySlotUpdateS2CPacket(int slot, ItemStack stack) {
|
||||
this.slot = slot;
|
||||
this.stack = stack;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void read(PacketByteBuf buf) throws IOException {
|
||||
slot = buf.readInt();
|
||||
stack = buf.readItemStack();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(PacketByteBuf buf) throws IOException {
|
||||
buf.writeInt(slot);
|
||||
buf.writeItemStack(stack);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void apply(ClientPlayPacketListener listener) {
|
||||
// TODO: write method
|
||||
}
|
||||
|
||||
@Environment(EnvType.CLIENT)
|
||||
public int getSlot() {
|
||||
return slot;
|
||||
}
|
||||
|
||||
@Environment(EnvType.CLIENT)
|
||||
public ItemStack getStack() {
|
||||
return stack;
|
||||
}
|
||||
}
|
|
@ -7,18 +7,16 @@ import dev.onyxstudios.cca.api.v3.item.ItemComponent;
|
|||
public class Counter extends ItemComponent {
|
||||
public Counter(ItemStack stack) {
|
||||
super(stack, DimensionalDoorsComponents.COUNTER_COMPONENT_KEY);
|
||||
|
||||
if(!this.hasTag("counter")) {
|
||||
this.putInt("counter", -1);
|
||||
}
|
||||
if (!this.hasTag("counter"))
|
||||
this.putInt("counter", 0);
|
||||
}
|
||||
|
||||
public int count() {
|
||||
return getInt("counter");
|
||||
}
|
||||
|
||||
public void clear() {
|
||||
this.putInt("counter", -1);
|
||||
public void set(int value) {
|
||||
this.putInt("counter", omitZero(value));
|
||||
}
|
||||
|
||||
public int increment() {
|
||||
|
@ -30,4 +28,23 @@ public class Counter extends ItemComponent {
|
|||
public static <T> Counter get(T provider) {
|
||||
return DimensionalDoorsComponents.COUNTER_COMPONENT_KEY.get(provider);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void putInt(String key, int value) {
|
||||
super.putInt(key, omitZero(value));
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected int getInt(String key) {
|
||||
return withZero(super.getInt(key));
|
||||
}
|
||||
|
||||
private int omitZero(int value) {
|
||||
return value >= 0 ? value + 1 : value;
|
||||
}
|
||||
|
||||
private int withZero(int value) {
|
||||
return value > 0 ? value - 1 : value;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
"type": "dimdoors:shell"
|
||||
},
|
||||
{
|
||||
"door_type": "dimdoors:iron_dimensional_door",
|
||||
"door_type": "dimdoors:quartz_dimensional_door",
|
||||
"x": "width/2",
|
||||
"facing": "north",
|
||||
"y": "5",
|
||||
|
|
|
@ -35,6 +35,8 @@
|
|||
"id": 0
|
||||
}
|
||||
],
|
||||
"offset_x": "5",
|
||||
"offset_y": "5",
|
||||
"offset_z": "5",
|
||||
"height": "5 + 16 * min(15, public_size)"
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue