- Баллы
- 6
Не уверен что тут это является нормой, но все же)
Можно получить небольшое ревью? Первый раз пишу подобное и не очень понимаю как лучше (не бейте)
Можно получить небольшое ревью? Первый раз пишу подобное и не очень понимаю как лучше (не бейте)
Код:
public class WateringCan implements Listener {
final NamespacedKey key;
final int MAX_WATER_LEVEL = 5;
Integer waterLevel = 0;
public WateringCan(Survival plugin) {
key = new NamespacedKey(plugin, "water_level");
}
@EventHandler
public void playerInteractEvent(PlayerInteractEvent event) {
ItemStack itemStack = Objects.requireNonNull(event.getItem());
boolean rightClickBlock = (event.getAction() == Action.RIGHT_CLICK_BLOCK);
if (rightClickBlock && isWateringCan(itemStack)) {
Block block = event.getClickedBlock();
if (block.getRelative(event.getBlockFace()).getType() == Material.WATER) {
waterCanFill(itemStack);
block.getWorld().playSound(block.getLocation(), Sound.ITEM_BUCKET_FILL, 1.0f, 1.0f);
} else if (block.getBlockData() instanceof Farmland farmland) {
if (waterLevel > 0 && farmland.getMoisture() > 0) return;
farmland.setMoisture(farmland.getMaximumMoisture());
block.setBlockData(farmland);
waterCanReduce(itemStack);
block.getWorld().spawnParticle(Particle.WATER_SPLASH, block.getLocation(), 1);
block.getWorld().playSound(block.getLocation(), Sound.ITEM_BUCKET_EMPTY, 1.0f, 1.0f);
}
}
}
private void waterCanReduce(ItemStack item) {
ItemMeta itemMeta = item.getItemMeta();
itemMeta.getPersistentDataContainer().set(key, PersistentDataType.INTEGER, waterLevel--);
itemMeta.setLore(Collections.singletonList("*".repeat(waterLevel)));
item.setItemMeta(itemMeta);
}
private void waterCanFill(ItemStack item) {
ItemMeta itemMeta = item.getItemMeta();
itemMeta.getPersistentDataContainer().set(key, PersistentDataType.INTEGER, MAX_WATER_LEVEL);
itemMeta.setLore(Collections.singletonList("*".repeat(MAX_WATER_LEVEL)));
item.setItemMeta(itemMeta);
}
private boolean isWateringCan(ItemStack itemStack) {
ItemMeta itemMeta = itemStack.getItemMeta();
return itemMeta.getPersistentDataContainer().has(key, PersistentDataType.INTEGER);
}
}
Последнее редактирование:
