71 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package net.minecraft.world.entity;
 | |
| 
 | |
| import io.netty.buffer.ByteBuf;
 | |
| import java.util.EnumSet;
 | |
| import java.util.HashSet;
 | |
| import java.util.Set;
 | |
| import net.minecraft.network.codec.ByteBufCodecs;
 | |
| import net.minecraft.network.codec.StreamCodec;
 | |
| 
 | |
| public enum Relative {
 | |
| 	X(0),
 | |
| 	Y(1),
 | |
| 	Z(2),
 | |
| 	Y_ROT(3),
 | |
| 	X_ROT(4),
 | |
| 	DELTA_X(5),
 | |
| 	DELTA_Y(6),
 | |
| 	DELTA_Z(7),
 | |
| 	ROTATE_DELTA(8);
 | |
| 
 | |
| 	public static final Set<Relative> ALL = Set.of(values());
 | |
| 	public static final Set<Relative> ROTATION = Set.of(X_ROT, Y_ROT);
 | |
| 	public static final Set<Relative> DELTA = Set.of(DELTA_X, DELTA_Y, DELTA_Z, ROTATE_DELTA);
 | |
| 	public static final StreamCodec<ByteBuf, Set<Relative>> SET_STREAM_CODEC = ByteBufCodecs.INT.map(Relative::unpack, Relative::pack);
 | |
| 	private final int bit;
 | |
| 
 | |
| 	@SafeVarargs
 | |
| 	public static Set<Relative> union(Set<Relative>... sets) {
 | |
| 		HashSet<Relative> hashSet = new HashSet();
 | |
| 
 | |
| 		for (Set<Relative> set : sets) {
 | |
| 			hashSet.addAll(set);
 | |
| 		}
 | |
| 
 | |
| 		return hashSet;
 | |
| 	}
 | |
| 
 | |
| 	private Relative(final int bit) {
 | |
| 		this.bit = bit;
 | |
| 	}
 | |
| 
 | |
| 	private int getMask() {
 | |
| 		return 1 << this.bit;
 | |
| 	}
 | |
| 
 | |
| 	private boolean isSet(int data) {
 | |
| 		return (data & this.getMask()) == this.getMask();
 | |
| 	}
 | |
| 
 | |
| 	public static Set<Relative> unpack(int data) {
 | |
| 		Set<Relative> set = EnumSet.noneOf(Relative.class);
 | |
| 
 | |
| 		for (Relative relative : values()) {
 | |
| 			if (relative.isSet(data)) {
 | |
| 				set.add(relative);
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		return set;
 | |
| 	}
 | |
| 
 | |
| 	public static int pack(Set<Relative> relatives) {
 | |
| 		int i = 0;
 | |
| 
 | |
| 		for (Relative relative : relatives) {
 | |
| 			i |= relative.getMask();
 | |
| 		}
 | |
| 
 | |
| 		return i;
 | |
| 	}
 | |
| }
 |