UltimateStacker/src/main/java/com/songoda/ultimatestacker/stackable/entity/EntityStackManager.java

143 lines
4.6 KiB
Java

package com.songoda.ultimatestacker.stackable.entity;
import com.songoda.ultimatestacker.UltimateStacker;
import com.songoda.ultimatestacker.utils.Methods;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Chunk;
import org.bukkit.World;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.metadata.FixedMetadataValue;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
public class EntityStackManager {
private final UltimateStacker plugin;
public EntityStackManager(UltimateStacker plugin) {
this.plugin = plugin;
}
public EntityStack createStack(LivingEntity entity, int amount) {
return new EntityStack(entity, amount);
}
public boolean isStackedEntity(Entity entity) {
return entity.hasMetadata("US_AMOUNT");
}
public int getAmount(Entity entity) {
if (!isStackedEntity(entity)) return 1;
if (entity.getMetadata("US_AMOUNT").isEmpty()) return 1;
return entity.getMetadata("US_AMOUNT").get(0).asInt();
}
public String getLastPlayerDamage(Entity entity) {
if (!entity.hasMetadata("US_LAST_PLAYER_DAMAGE")) return null;
if (entity.getMetadata("US_LAST_PLAYER_DAMAGE").isEmpty()) return null;
return entity.getMetadata("US_LAST_PLAYER_DAMAGE").get(0).asString();
}
public void setLastPlayerDamage(Entity entity, Player player) {
if (player == null) return;
if (entity == null) return;
if (entity instanceof Player) return;
entity.setMetadata("US_LAST_PLAYER_DAMAGE", new FixedMetadataValue(plugin, player.getName()));
}
public EntityStack addStack(LivingEntity entity) {
return addStack(entity, getAmount(entity) == 1 ? 1 : getAmount(entity));
}
public EntityStack addStack(LivingEntity entity, int amount) {
if (entity == null) return null;
if (isStackedEntity(entity)) {
EntityStack stack = getStack(entity);
stack.addEntityToStack(amount);
return stack;
}
return null;
}
public EntityStack getStack(UUID uuid) {
Entity entity = Bukkit.getEntity(uuid);
if (entity == null) return null;
if (isStackedEntity(entity)) {
if (entity instanceof LivingEntity) {
return new EntityStack((LivingEntity) entity);
}
}
return null;
}
public EntityStack getStack(LivingEntity entity) {
if (!isStackedEntity(entity)) return null;
return new EntityStack(entity);
}
public EntityStack decreaseStack(Entity entity) {
EntityStack stack = getStack((LivingEntity) entity);
if (stack == null) return null;
stack.removeEntityFromStack(1);
return stack;
}
public EntityStack decreaseStack(Entity entity, int amount) {
EntityStack stack = getStack((LivingEntity) entity);
if (stack == null) return null;
stack.removeEntityFromStack(amount);
return stack;
}
public EntityStack updateStack(LivingEntity entity) {
EntityStack stack = getStack(entity);
if (stack == null) return null;
stack.updateNameTag();
return stack;
}
/**
* Transfers the stack from one entity to another.
* (e.g. slimes split)
* @param oldEntity The old entity to transfer the stack from.
* @param newEntity The new entity to transfer the stack to.
* @return The new stack.
*/
public EntityStack transferStack(LivingEntity oldEntity, LivingEntity newEntity, boolean takeOne) {
EntityStack stack = getStack(oldEntity);
if (stack == null) return null;
EntityStack newStack = new EntityStack(newEntity, takeOne ? stack.getAmount()-1 : stack.getAmount());
stack.destroy();
return newStack;
}
public EntityStack updateStack(LivingEntity oldEntity, LivingEntity newEntity) {
EntityStack stack = getStack(oldEntity);
if (stack == null) return null;
int amount = stack.getAmount()-1;
stack.destroy();
if (amount == 0 && newEntity != null) {
newEntity.remove();
return null;
}
return createStack(newEntity, amount);
}
public void setStack(LivingEntity newEntity, int amount) {
if (isStackedEntity(newEntity)) {
EntityStack stack = getStack(newEntity);
stack.setAmount(amount);
} else {
createStack(newEntity, amount);
}
}
}