Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -545,6 +545,9 @@ private void handleEntityData(EntityDataHandlerEvent event, EntityData entityDat
final EntityTracker1_9 tracker = tracker(event.user());
if (entityData.id() == EntityDataIndex1_9.ENTITY_STATUS.getIndex()) {
tracker.getStatus().put(event.entityId(), (Byte) entityData.value());
if (tracker.isHandActive(event.entityId())) {
entityData.setValue((byte) ((byte) entityData.value() | 1 << STATUS_USE_BIT));
}
}
final EntityDataIndex1_9 metaIndex = EntityDataIndex1_8.searchIndex(event.entityType(), entityData.id());
if (metaIndex == null) {
Expand All @@ -554,8 +557,10 @@ private void handleEntityData(EntityDataHandlerEvent event, EntityData entityDat
}
if (metaIndex.getOldType() == null || metaIndex.getNewType() == null) {
if (metaIndex == EntityDataIndex1_9.PLAYER_HAND) { // Player eating/aiming/drinking
final boolean handActive = (((byte) entityData.value()) & 1 << HAND_ACTIVE_BIT) != 0;
tracker.setHandActive(event.entityId(), handActive);
byte status = (byte) tracker.getStatus().getOrDefault(event.entityId(), 0);
if ((((byte) entityData.value()) & 1 << HAND_ACTIVE_BIT) != 0) {
if (handActive) {
status = (byte) (status | 1 << STATUS_USE_BIT);
} else {
status = (byte) (status & ~(1 << STATUS_USE_BIT));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@
import com.viaversion.viaversion.libs.fastutil.ints.Int2ObjectOpenHashMap;
import com.viaversion.viaversion.libs.fastutil.ints.IntArrayList;
import com.viaversion.viaversion.libs.fastutil.ints.IntList;
import com.viaversion.viaversion.libs.fastutil.ints.IntOpenHashSet;
import com.viaversion.viaversion.libs.fastutil.ints.IntSet;
import java.util.List;
import java.util.Map;

Expand All @@ -35,6 +37,7 @@ public class EntityTracker1_9 extends EntityTrackerBase {
private final Int2ObjectMap<IntList> vehicles = new Int2ObjectOpenHashMap<>();
private final Int2ObjectMap<Vector> offsets = new Int2ObjectOpenHashMap<>();
private final Int2IntMap status = new Int2IntOpenHashMap();
private final IntSet handActive = new IntOpenHashSet();

public EntityTracker1_9(UserConnection connection) {
super(connection, EntityTypes1_9.EntityType.PLAYER);
Expand All @@ -45,6 +48,7 @@ public void removeEntity(int id) {
vehicles.remove(id);
offsets.remove(id);
status.remove(id);
handActive.remove(id);

vehicles.forEach((vehicle, passengers) -> passengers.rem(id));
vehicles.int2ObjectEntrySet().removeIf(entry -> entry.getValue().isEmpty());
Expand Down Expand Up @@ -88,4 +92,16 @@ public Integer getVehicle(final int passenger) {
public Int2IntMap getStatus() {
return status;
}

public boolean isHandActive(final int id) {
return handActive.contains(id);
}

public void setHandActive(final int id, final boolean active) {
if (active) {
handActive.add(id);
} else {
handActive.remove(id);
}
}
}