minecraft-src/net/minecraft/world/entity/EquipmentSlot.java
2025-07-04 03:45:38 +03:00

102 lines
3.1 KiB
Java

package net.minecraft.world.entity;
import io.netty.buffer.ByteBuf;
import java.util.List;
import java.util.function.IntFunction;
import net.minecraft.network.codec.ByteBufCodecs;
import net.minecraft.network.codec.StreamCodec;
import net.minecraft.util.ByIdMap;
import net.minecraft.util.StringRepresentable;
import net.minecraft.util.ByIdMap.OutOfBoundsStrategy;
import net.minecraft.world.item.ItemStack;
public enum EquipmentSlot implements StringRepresentable {
MAINHAND(EquipmentSlot.Type.HAND, 0, 0, "mainhand"),
OFFHAND(EquipmentSlot.Type.HAND, 1, 5, "offhand"),
FEET(EquipmentSlot.Type.HUMANOID_ARMOR, 0, 1, 1, "feet"),
LEGS(EquipmentSlot.Type.HUMANOID_ARMOR, 1, 1, 2, "legs"),
CHEST(EquipmentSlot.Type.HUMANOID_ARMOR, 2, 1, 3, "chest"),
HEAD(EquipmentSlot.Type.HUMANOID_ARMOR, 3, 1, 4, "head"),
BODY(EquipmentSlot.Type.ANIMAL_ARMOR, 0, 1, 6, "body"),
SADDLE(EquipmentSlot.Type.SADDLE, 0, 1, 7, "saddle");
public static final int NO_COUNT_LIMIT = 0;
public static final List<EquipmentSlot> VALUES = List.of(values());
public static final IntFunction<EquipmentSlot> BY_ID = ByIdMap.continuous(equipmentSlot -> equipmentSlot.id, values(), OutOfBoundsStrategy.ZERO);
public static final StringRepresentable.EnumCodec<EquipmentSlot> CODEC = StringRepresentable.fromEnum(EquipmentSlot::values);
public static final StreamCodec<ByteBuf, EquipmentSlot> STREAM_CODEC = ByteBufCodecs.idMapper(BY_ID, equipmentSlot -> equipmentSlot.id);
private final EquipmentSlot.Type type;
private final int index;
private final int countLimit;
private final int id;
private final String name;
private EquipmentSlot(final EquipmentSlot.Type type, final int index, final int countLimit, final int id, final String name) {
this.type = type;
this.index = index;
this.countLimit = countLimit;
this.id = id;
this.name = name;
}
private EquipmentSlot(final EquipmentSlot.Type type, final int index, final int filterFlag, final String name) {
this(type, index, 0, filterFlag, name);
}
public EquipmentSlot.Type getType() {
return this.type;
}
public int getIndex() {
return this.index;
}
public int getIndex(int baseIndex) {
return baseIndex + this.index;
}
public ItemStack limit(ItemStack stack) {
return this.countLimit > 0 ? stack.split(this.countLimit) : stack;
}
public int getId() {
return this.id;
}
public int getFilterBit(int offset) {
return this.id + offset;
}
public String getName() {
return this.name;
}
public boolean isArmor() {
return this.type == EquipmentSlot.Type.HUMANOID_ARMOR || this.type == EquipmentSlot.Type.ANIMAL_ARMOR;
}
@Override
public String getSerializedName() {
return this.name;
}
public boolean canIncreaseExperience() {
return this.type != EquipmentSlot.Type.SADDLE;
}
public static EquipmentSlot byName(String targetName) {
EquipmentSlot equipmentSlot = (EquipmentSlot)CODEC.byName(targetName);
if (equipmentSlot != null) {
return equipmentSlot;
} else {
throw new IllegalArgumentException("Invalid slot '" + targetName + "'");
}
}
public static enum Type {
HAND,
HUMANOID_ARMOR,
ANIMAL_ARMOR,
SADDLE;
}
}