check permissions before invalidating network

fixed inventory desync fixes #3092
This commit is contained in:
Darkere
2021-10-15 20:19:24 +02:00
parent e6155d76f8
commit b2d86db9a5
2 changed files with 27 additions and 4 deletions

View File

@@ -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());
}
}
}

View File

@@ -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)));
}
}