Add server-side check for extendo-grip and contraption interaction
This commit is contained in:
parent
4a15fbcec3
commit
5c64c2d942
2 changed files with 43 additions and 33 deletions
|
@ -6,6 +6,7 @@ import com.simibubi.create.content.contraptions.components.structureMovement.Abs
|
|||
import com.simibubi.create.foundation.networking.SimplePacketBase;
|
||||
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.entity.player.ServerPlayerEntity;
|
||||
import net.minecraft.network.PacketBuffer;
|
||||
import net.minecraft.util.Direction;
|
||||
|
@ -45,22 +46,26 @@ public class ContraptionInteractionPacket extends SimplePacketBase {
|
|||
|
||||
@Override
|
||||
public void handle(Supplier<Context> context) {
|
||||
context.get()
|
||||
.enqueueWork(() -> {
|
||||
ServerPlayerEntity sender = context.get()
|
||||
.getSender();
|
||||
if (sender == null)
|
||||
return;
|
||||
Entity entityByID = sender.getServerWorld()
|
||||
.getEntityByID(target);
|
||||
if (!(entityByID instanceof AbstractContraptionEntity))
|
||||
return;
|
||||
AbstractContraptionEntity contraptionEntity = (AbstractContraptionEntity) entityByID;
|
||||
if (contraptionEntity.handlePlayerInteraction(sender, localPos, face, interactionHand))
|
||||
sender.swingHand(interactionHand, true);
|
||||
});
|
||||
context.get()
|
||||
.setPacketHandled(true);
|
||||
context.get().enqueueWork(() -> {
|
||||
ServerPlayerEntity sender = context.get().getSender();
|
||||
if (sender == null)
|
||||
return;
|
||||
Entity entityByID = sender.getServerWorld().getEntityByID(target);
|
||||
if (!(entityByID instanceof AbstractContraptionEntity))
|
||||
return;
|
||||
AbstractContraptionEntity contraptionEntity = (AbstractContraptionEntity) entityByID;
|
||||
double d = sender.getAttribute(PlayerEntity.REACH_DISTANCE).getValue();
|
||||
if (!sender.canEntityBeSeen(entityByID))
|
||||
d -= 3;
|
||||
d *= d;
|
||||
if (sender.getDistanceSq(entityByID) > d) {
|
||||
// TODO log?
|
||||
return;
|
||||
}
|
||||
if (contraptionEntity.handlePlayerInteraction(sender, localPos, face, interactionHand))
|
||||
sender.swingHand(interactionHand, true);
|
||||
});
|
||||
context.get().setPacketHandled(true);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@ import java.util.function.Supplier;
|
|||
import com.simibubi.create.foundation.networking.SimplePacketBase;
|
||||
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.entity.player.ServerPlayerEntity;
|
||||
import net.minecraft.network.PacketBuffer;
|
||||
import net.minecraft.util.Hand;
|
||||
|
@ -53,25 +54,29 @@ public class ExtendoGripInteractionPacket extends SimplePacketBase {
|
|||
|
||||
@Override
|
||||
public void handle(Supplier<Context> context) {
|
||||
context.get()
|
||||
.enqueueWork(() -> {
|
||||
ServerPlayerEntity sender = context.get()
|
||||
.getSender();
|
||||
if (sender == null)
|
||||
context.get().enqueueWork(() -> {
|
||||
ServerPlayerEntity sender = context.get().getSender();
|
||||
if (sender == null)
|
||||
return;
|
||||
Entity entityByID = sender.getServerWorld().getEntityByID(target);
|
||||
if (entityByID != null && ExtendoGripItem.isHoldingExtendoGrip(sender)) {
|
||||
double d = sender.getAttribute(PlayerEntity.REACH_DISTANCE).getValue();
|
||||
if (!sender.canEntityBeSeen(entityByID))
|
||||
d -= 3;
|
||||
d *= d;
|
||||
if (sender.getDistanceSq(entityByID) > d) {
|
||||
// TODO log?
|
||||
return;
|
||||
Entity entityByID = sender.getServerWorld()
|
||||
.getEntityByID(target);
|
||||
if (entityByID != null && ExtendoGripItem.isHoldingExtendoGrip(sender)) {
|
||||
if (interactionHand == null)
|
||||
sender.attackTargetEntityWithCurrentItem(entityByID);
|
||||
else if (specificPoint == null)
|
||||
sender.interactOn(entityByID, interactionHand);
|
||||
else
|
||||
entityByID.applyPlayerInteraction(sender, specificPoint, interactionHand);
|
||||
}
|
||||
});
|
||||
context.get()
|
||||
.setPacketHandled(true);
|
||||
if (interactionHand == null)
|
||||
sender.attackTargetEntityWithCurrentItem(entityByID);
|
||||
else if (specificPoint == null)
|
||||
sender.interactOn(entityByID, interactionHand);
|
||||
else
|
||||
entityByID.applyPlayerInteraction(sender, specificPoint, interactionHand);
|
||||
}
|
||||
});
|
||||
context.get().setPacketHandled(true);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue