mirror of
https://github.com/songoda/UltimateStacker.git
synced 2024-06-26 06:35:15 +02:00
more egg options.
This commit is contained in:
parent
1477e26206
commit
42a1e5dac4
|
@ -4,17 +4,23 @@ import com.songoda.ultimatestacker.UltimateStacker;
|
|||
import com.songoda.ultimatestacker.entity.EntityStack;
|
||||
import com.songoda.ultimatestacker.spawner.SpawnerStack;
|
||||
import com.songoda.ultimatestacker.spawner.SpawnerStackManager;
|
||||
import com.songoda.ultimatestacker.utils.Methods;
|
||||
import com.songoda.ultimatestacker.utils.Reflection;
|
||||
import com.songoda.ultimatestacker.utils.ServerVersion;
|
||||
import com.songoda.ultimatestacker.utils.settings.Setting;
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.Action;
|
||||
import org.bukkit.event.entity.SpawnerSpawnEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
import org.bukkit.material.SpawnEgg;
|
||||
|
||||
public class SpawnerListeners implements Listener {
|
||||
|
||||
|
@ -47,20 +53,69 @@ public class SpawnerListeners implements Listener {
|
|||
|
||||
if (event.getItem() == null) return;
|
||||
|
||||
Material type = event.getItem().getType();
|
||||
Material itemType = event.getItem().getType();
|
||||
Block block = event.getClickedBlock();
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if (block == null || type == Material.AIR) return;
|
||||
if (block == null || itemType == Material.AIR) return;
|
||||
|
||||
Material blockType = block.getType();
|
||||
|
||||
if (block.getType() != (plugin.isServerVersionAtLeast(ServerVersion.V1_13) ? Material.SPAWNER : Material.valueOf("MOB_SPAWNER"))
|
||||
|| !type.toString().contains(plugin.isServerVersionAtLeast(ServerVersion.V1_13) ? "SPAWN_EGG" : "MONSTER_EGG"))
|
||||
|| !itemType.toString().contains(plugin.isServerVersionAtLeast(ServerVersion.V1_13) ? "SPAWN_EGG" : "MONSTER_EGG"))
|
||||
return;
|
||||
|
||||
event.setCancelled(true);
|
||||
|
||||
if (!Setting.EGGS_CONVERT_SPAWNERS.getBoolean()
|
||||
|| !event.getPlayer().hasPermission("ultimatestacker.eggconvert")) {
|
||||
if (!Setting.EGGS_CONVERT_SPAWNERS.getBoolean()) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
SpawnerStackManager manager = plugin.getSpawnerStackManager();
|
||||
|
||||
SpawnerStack spawner = manager.isSpawner(block.getLocation())
|
||||
? manager.getSpawner(block) : manager.addSpawner(new SpawnerStack(block.getLocation(), 1));
|
||||
|
||||
int stackSize = spawner.getAmount();
|
||||
int amt = player.getInventory().getItemInHand().getAmount();
|
||||
EntityType entityType;
|
||||
|
||||
if (plugin.isServerVersionAtLeast(ServerVersion.V1_13))
|
||||
entityType = EntityType.valueOf(itemType.name().replace("_SPAWN_EGG", "").replace("MOOSHROOM", "MUSHROOM_COW"));
|
||||
else if (plugin.isServerVersionAtLeast(ServerVersion.V1_12)) {
|
||||
String str = Reflection.getNBTTagCompound(Reflection.getNMSItemStack(event.getItem())).toString();
|
||||
if (str.contains("minecraft:"))
|
||||
entityType = EntityType.fromName(str.substring(str.indexOf("minecraft:") + 10, str.indexOf("\"}")));
|
||||
else
|
||||
entityType = EntityType.fromName(str.substring(str.indexOf("EntityTag:{id:") + 15, str.indexOf("\"}")));
|
||||
} else
|
||||
entityType = ((SpawnEgg) event.getItem().getData()).getSpawnedType();
|
||||
|
||||
if (!player.hasPermission("ultimatestacker.egg." + entityType.name())) {
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (amt < stackSize) {
|
||||
plugin.getLocale().getMessage("event.egg.needmore")
|
||||
.processPlaceholder("amount", stackSize).sendPrefixedMessage(player);
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (blockType.equals(itemType)) {
|
||||
plugin.getLocale().getMessage("event.egg.sametype")
|
||||
.processPlaceholder("type", entityType.name()).sendPrefixedMessage(player);
|
||||
return;
|
||||
}
|
||||
|
||||
spawner.getCreatureSpawner().setSpawnedType(entityType);
|
||||
spawner.getCreatureSpawner().update();
|
||||
|
||||
if (plugin.getHologram() != null)
|
||||
plugin.getHologram().update(spawner);
|
||||
if (player.getGameMode() != GameMode.CREATIVE) {
|
||||
Methods.takeItem(player, stackSize - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,6 +23,10 @@ public class SpawnerStack {
|
|||
setAmount(amount);
|
||||
}
|
||||
|
||||
public CreatureSpawner getCreatureSpawner() {
|
||||
return (CreatureSpawner) location.getBlock().getState();
|
||||
}
|
||||
|
||||
public int getAmount() {
|
||||
return amount;
|
||||
}
|
||||
|
@ -51,7 +55,7 @@ public class SpawnerStack {
|
|||
public int calculateSpawnCount() {
|
||||
Random random = new Random();
|
||||
int count = 0;
|
||||
for (int i = 0; i < getAmount(); i ++) {
|
||||
for (int i = 0; i < getAmount(); i++) {
|
||||
count += random.nextInt(3 - 1 + 1) + 1;
|
||||
}
|
||||
return count;
|
||||
|
|
|
@ -2,6 +2,7 @@ package com.songoda.ultimatestacker.utils;
|
|||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.block.CreatureSpawner;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Method;
|
||||
|
@ -66,5 +67,52 @@ public class Reflection {
|
|||
}
|
||||
}
|
||||
|
||||
public static Object getNMSItemStack(ItemStack item) {
|
||||
@SuppressWarnings("rawtypes")
|
||||
Class cis = getCraftItemStack();
|
||||
java.lang.reflect.Method method;
|
||||
try {
|
||||
method = cis.getMethod("asNMSCopy", ItemStack.class);
|
||||
Object answer = method.invoke(cis, item);
|
||||
return answer;
|
||||
} catch (Exception e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@SuppressWarnings({"unchecked"})
|
||||
public static Object getNBTTagCompound(Object nmsitem) {
|
||||
@SuppressWarnings("rawtypes")
|
||||
Class c = nmsitem.getClass();
|
||||
java.lang.reflect.Method method;
|
||||
try {
|
||||
method = c.getMethod("getTag");
|
||||
Object answer = method.invoke(nmsitem);
|
||||
return answer;
|
||||
} catch (Exception e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
public static Class getCraftItemStack() {
|
||||
String version = Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3];
|
||||
try {
|
||||
Class c = Class.forName("org.bukkit.craftbukkit." + version + ".inventory.CraftItemStack");
|
||||
//Constructor<?> cons = c.getConstructor(ItemStack.class);
|
||||
//return cons.newInstance(item);
|
||||
return c;
|
||||
} catch (Exception ex) {
|
||||
System.out.println("Error in ItemNBTAPI! (Outdated plugin?)");
|
||||
ex.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -8,4 +8,6 @@ command.give.success = "&7You have been given a &6%type%&7."
|
|||
|
||||
#Event Messages
|
||||
|
||||
event.general.nopermission = "&cYou do not have permission to do that."
|
||||
event.general.nopermission = "&cYou do not have permission to do that."
|
||||
event.egg.needmore = "&7You need &6%amount% &7Monster Eggs to convert this spawner."
|
||||
event.egg.sametype = "&7This already spawns &6%type%s&7."
|
Loading…
Reference in New Issue
Block a user