57 lines
1.9 KiB
Java
57 lines
1.9 KiB
Java
package net.minecraft.world.item;
|
|
|
|
import com.google.common.collect.Maps;
|
|
import java.util.Map;
|
|
import net.minecraft.sounds.SoundEvents;
|
|
import net.minecraft.sounds.SoundSource;
|
|
import net.minecraft.world.InteractionHand;
|
|
import net.minecraft.world.InteractionResult;
|
|
import net.minecraft.world.entity.LivingEntity;
|
|
import net.minecraft.world.entity.animal.sheep.Sheep;
|
|
import net.minecraft.world.entity.player.Player;
|
|
import net.minecraft.world.level.Level;
|
|
import net.minecraft.world.level.block.entity.SignBlockEntity;
|
|
|
|
public class DyeItem extends Item implements SignApplicator {
|
|
private static final Map<DyeColor, DyeItem> ITEM_BY_COLOR = Maps.newEnumMap(DyeColor.class);
|
|
private final DyeColor dyeColor;
|
|
|
|
public DyeItem(DyeColor dyeColor, Item.Properties properties) {
|
|
super(properties);
|
|
this.dyeColor = dyeColor;
|
|
ITEM_BY_COLOR.put(dyeColor, this);
|
|
}
|
|
|
|
@Override
|
|
public InteractionResult interactLivingEntity(ItemStack stack, Player player, LivingEntity interactionTarget, InteractionHand usedHand) {
|
|
if (interactionTarget instanceof Sheep sheep && sheep.isAlive() && !sheep.isSheared() && sheep.getColor() != this.dyeColor) {
|
|
sheep.level().playSound(player, sheep, SoundEvents.DYE_USE, SoundSource.PLAYERS, 1.0F, 1.0F);
|
|
if (!player.level().isClientSide) {
|
|
sheep.setColor(this.dyeColor);
|
|
stack.shrink(1);
|
|
}
|
|
|
|
return InteractionResult.SUCCESS;
|
|
} else {
|
|
return InteractionResult.PASS;
|
|
}
|
|
}
|
|
|
|
public DyeColor getDyeColor() {
|
|
return this.dyeColor;
|
|
}
|
|
|
|
public static DyeItem byColor(DyeColor color) {
|
|
return (DyeItem)ITEM_BY_COLOR.get(color);
|
|
}
|
|
|
|
@Override
|
|
public boolean tryApplyToSign(Level level, SignBlockEntity sign, boolean isFront, Player player) {
|
|
if (sign.updateText(signText -> signText.setColor(this.getDyeColor()), isFront)) {
|
|
level.playSound(null, sign.getBlockPos(), SoundEvents.DYE_USE, SoundSource.BLOCKS, 1.0F, 1.0F);
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
}
|