check permissions before invalidating network
fixed inventory desync fixes #3092
This commit is contained in:
@@ -4,8 +4,10 @@ import com.refinedmods.refinedstorage.api.network.node.INetworkNode;
|
||||
import com.refinedmods.refinedstorage.api.network.security.Permission;
|
||||
import com.refinedmods.refinedstorage.api.util.Action;
|
||||
import com.refinedmods.refinedstorage.util.NetworkUtils;
|
||||
import com.refinedmods.refinedstorage.util.PlayerUtils;
|
||||
import com.refinedmods.refinedstorage.util.WorldUtils;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.entity.player.ServerPlayerEntity;
|
||||
import net.minecraft.util.Direction;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.IWorld;
|
||||
@@ -21,10 +23,6 @@ public class NetworkNodeListener {
|
||||
INetworkNode placed = NetworkUtils.getNodeFromTile(e.getWorld().getTileEntity(e.getPos()));
|
||||
|
||||
if (placed != null) {
|
||||
discoverNode(e.getWorld(), e.getPos());
|
||||
|
||||
placed.setOwner(player.getGameProfile().getId());
|
||||
|
||||
for (Direction facing : Direction.values()) {
|
||||
INetworkNode node = NetworkUtils.getNodeFromTile(e.getWorld().getTileEntity(e.getBlockSnapshot().getPos().offset(facing)));
|
||||
|
||||
@@ -33,9 +31,16 @@ public class NetworkNodeListener {
|
||||
|
||||
e.setCanceled(true);
|
||||
|
||||
//Fixes desync as we do not cancel the event clientside
|
||||
PlayerUtils.updateHeldItems((ServerPlayerEntity) player);
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
discoverNode(e.getWorld(), e.getPos());
|
||||
|
||||
placed.setOwner(player.getGameProfile().getId());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -0,0 +1,18 @@
|
||||
package com.refinedmods.refinedstorage.util;
|
||||
|
||||
import net.minecraft.entity.player.ServerPlayerEntity;
|
||||
import net.minecraft.network.play.server.SSetSlotPacket;
|
||||
|
||||
public class PlayerUtils {
|
||||
|
||||
|
||||
public static void updateHeldItems(ServerPlayerEntity player) {
|
||||
int mainHandSlot = player.inventory.currentItem;
|
||||
int offHandSlot = 40; //TODO: @Volatile In 1.17 there is a global variable for this
|
||||
|
||||
//See ClientPlayNetHandler#HandleSetSlot for the awful vanilla code that makes this necessary
|
||||
// -2 as that directly sets the inventory slots
|
||||
player.connection.sendPacket(new SSetSlotPacket(-2, mainHandSlot, player.inventory.getStackInSlot(mainHandSlot)));
|
||||
player.connection.sendPacket(new SSetSlotPacket(-2, offHandSlot, player.inventory.getStackInSlot(offHandSlot)));
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user