Merge branch 'development'
This commit is contained in:
commit
7a667a1ffa
4
pom.xml
4
pom.xml
|
@ -2,7 +2,7 @@
|
|||
<groupId>com.songoda</groupId>
|
||||
<artifactId>UltimateStacker</artifactId>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<version>1.11.18</version>
|
||||
<version>1.11.19</version>
|
||||
<build>
|
||||
<defaultGoal>clean install</defaultGoal>
|
||||
<finalName>UltimateStacker-${project.version}</finalName>
|
||||
|
@ -122,7 +122,7 @@
|
|||
<dependency>
|
||||
<groupId>com.songoda</groupId>
|
||||
<artifactId>Lootables</artifactId>
|
||||
<version>1.0.7</version>
|
||||
<version>1.0.8</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.songoda</groupId>
|
||||
|
|
|
@ -22,6 +22,9 @@ import com.songoda.ultimatestacker.entity.EntityStackManager;
|
|||
import com.songoda.ultimatestacker.hook.StackerHook;
|
||||
import com.songoda.ultimatestacker.hook.hooks.JobsHook;
|
||||
import com.songoda.ultimatestacker.listeners.*;
|
||||
import com.songoda.ultimatestacker.listeners.item.ItemCurrentListener;
|
||||
import com.songoda.ultimatestacker.listeners.item.ItemLegacyListener;
|
||||
import com.songoda.ultimatestacker.listeners.item.ItemListeners;
|
||||
import com.songoda.ultimatestacker.lootables.LootablesManager;
|
||||
import com.songoda.ultimatestacker.settings.Settings;
|
||||
import com.songoda.ultimatestacker.spawner.SpawnerStack;
|
||||
|
@ -163,6 +166,12 @@ public class UltimateStacker extends SongodaPlugin {
|
|||
pluginManager.registerEvents(new InteractListeners(this), this);
|
||||
pluginManager.registerEvents(new EntityListeners(this), this);
|
||||
pluginManager.registerEvents(new ItemListeners(this), this);
|
||||
|
||||
if (ServerVersion.isServerVersionAtLeast(ServerVersion.V1_12))
|
||||
pluginManager.registerEvents(new ItemCurrentListener(), this);
|
||||
else
|
||||
pluginManager.registerEvents(new ItemLegacyListener(), this);
|
||||
|
||||
pluginManager.registerEvents(new TameListeners(this), this);
|
||||
pluginManager.registerEvents(new SpawnerListeners(this), this);
|
||||
pluginManager.registerEvents(new SheepDyeListeners(this), this);
|
||||
|
@ -384,6 +393,21 @@ public class UltimateStacker extends SongodaPlugin {
|
|||
* @param newAmount number of items this item represents
|
||||
*/
|
||||
public static void updateItemAmount(Item item, ItemStack itemStack, int newAmount) {
|
||||
boolean blacklisted = isMaterialBlacklisted(itemStack);
|
||||
|
||||
if (newAmount > (itemStack.getMaxStackSize() / 2) && !blacklisted)
|
||||
itemStack.setAmount(Math.max(1, itemStack.getMaxStackSize() / 2));
|
||||
else
|
||||
itemStack.setAmount(newAmount);
|
||||
|
||||
// If amount is 0, Minecraft change the type to AIR
|
||||
if (itemStack.getType() == Material.AIR)
|
||||
return;
|
||||
|
||||
updateItemMeta(item, itemStack, newAmount);
|
||||
}
|
||||
|
||||
public static void updateItemMeta(Item item, ItemStack itemStack, int newAmount) {
|
||||
Material material = itemStack.getType();
|
||||
String name = TextUtils.convertToInvisibleString("IS") + Methods.compileItemName(itemStack, newAmount);
|
||||
|
||||
|
@ -391,14 +415,9 @@ public class UltimateStacker extends SongodaPlugin {
|
|||
|
||||
if (newAmount > (itemStack.getMaxStackSize() / 2) && !blacklisted) {
|
||||
item.setMetadata("US_AMT", new FixedMetadataValue(INSTANCE, newAmount));
|
||||
itemStack.setAmount(Math.max(1, itemStack.getMaxStackSize() / 2));
|
||||
} else {
|
||||
item.removeMetadata("US_AMT", INSTANCE);
|
||||
itemStack.setAmount(newAmount);
|
||||
}
|
||||
// If amount is 0, Minecraft change the type to AIR
|
||||
if (itemStack.getType() == Material.AIR)
|
||||
return;
|
||||
item.setItemStack(itemStack);
|
||||
|
||||
if ((blacklisted && !Settings.ITEM_HOLOGRAM_BLACKLIST.getBoolean())
|
||||
|
|
|
@ -12,7 +12,6 @@ import org.bukkit.Bukkit;
|
|||
import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.ExperienceOrb;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.event.entity.EntityDamageEvent;
|
||||
|
@ -26,19 +25,20 @@ import java.lang.reflect.Field;
|
|||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ConcurrentLinkedDeque;
|
||||
|
||||
public class EntityStack {
|
||||
|
||||
private UUID entity;
|
||||
private int amount;
|
||||
|
||||
private final Deque<Double> health = new ArrayDeque<>();
|
||||
private final Deque<Double> health = new ConcurrentLinkedDeque<>();
|
||||
final Object healthLock = new Object();
|
||||
UltimateStacker plugin = UltimateStacker.getInstance();
|
||||
|
||||
public EntityStack(LivingEntity entity, int amount) {
|
||||
this(entity.getUniqueId(), amount);
|
||||
health.add(entity.getHealth());
|
||||
this.addHealth(entity.getHealth());
|
||||
}
|
||||
|
||||
public EntityStack(UUID uuid, int amount) {
|
||||
|
|
|
@ -0,0 +1,37 @@
|
|||
package com.songoda.ultimatestacker.listeners.item;
|
||||
|
||||
import com.songoda.core.compatibility.CompatibleSound;
|
||||
import com.songoda.ultimatestacker.UltimateStacker;
|
||||
import com.songoda.ultimatestacker.settings.Settings;
|
||||
import com.songoda.ultimatestacker.utils.Methods;
|
||||
import org.bukkit.entity.Arrow;
|
||||
import org.bukkit.entity.Item;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.EntityPickupItemEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class ItemCurrentListener implements Listener {
|
||||
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
||||
public void onPickup(EntityPickupItemEvent event) {
|
||||
if (!Settings.STACK_ITEMS.getBoolean() || event.getItem() instanceof Arrow) return;
|
||||
// Amount here is not the total amount of item (32 if more than 32) but the amount of item the player can retrieve
|
||||
// ie there is x64 diamonds blocks (so 32), the player pick 8 items so the amount is 8 and not 32
|
||||
|
||||
Item item = event.getItem();
|
||||
ItemStack stack = item.getItemStack();
|
||||
int amount = UltimateStacker.getActualItemAmount(item);
|
||||
|
||||
if (event.getEntity() instanceof Player) {
|
||||
if (amount < (stack.getMaxStackSize() / 2)) return;
|
||||
event.setCancelled(true);
|
||||
Player player = (Player) event.getEntity();
|
||||
player.playSound(player.getLocation(), CompatibleSound.ENTITY_ITEM_PICKUP.getSound(), .2f, (float) (1 + Math.random()));
|
||||
Methods.updateInventory(event.getItem(), player.getInventory());
|
||||
} else {
|
||||
UltimateStacker.updateItemMeta(item, stack, amount - 1);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
package com.songoda.ultimatestacker.listeners.item;
|
||||
|
||||
import com.songoda.core.compatibility.CompatibleSound;
|
||||
import com.songoda.ultimatestacker.UltimateStacker;
|
||||
import com.songoda.ultimatestacker.settings.Settings;
|
||||
import com.songoda.ultimatestacker.utils.Methods;
|
||||
import org.bukkit.entity.Arrow;
|
||||
import org.bukkit.entity.Item;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.PlayerPickupItemEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
public class ItemLegacyListener implements Listener {
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
||||
public void onPickup(PlayerPickupItemEvent event) {
|
||||
if (!Settings.STACK_ITEMS.getBoolean() || event.getItem() instanceof Arrow) return;
|
||||
// Amount here is not the total amount of item (32 if more than 32) but the amount of item the player can retrieve
|
||||
// ie there is x64 diamonds blocks (so 32), the player pick 8 items so the amount is 8 and not 32
|
||||
|
||||
Item item = event.getItem();
|
||||
ItemStack stack = item.getItemStack();
|
||||
int amount = UltimateStacker.getActualItemAmount(item);
|
||||
if (amount < (stack.getMaxStackSize() / 2)) return;
|
||||
event.setCancelled(true);
|
||||
|
||||
event.getPlayer().playSound(event.getPlayer().getLocation(), CompatibleSound.ENTITY_ITEM_PICKUP.getSound(), .2f, (float) (1 + Math.random()));
|
||||
|
||||
Methods.updateInventory(event.getItem(), event.getPlayer().getInventory());
|
||||
}
|
||||
}
|
|
@ -1,13 +1,11 @@
|
|||
package com.songoda.ultimatestacker.listeners;
|
||||
package com.songoda.ultimatestacker.listeners.item;
|
||||
|
||||
import com.songoda.core.compatibility.CompatibleSound;
|
||||
import com.songoda.core.utils.BlockUtils;
|
||||
import com.songoda.ultimatestacker.UltimateStacker;
|
||||
import com.songoda.ultimatestacker.settings.Settings;
|
||||
import com.songoda.ultimatestacker.utils.Methods;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.bukkit.block.BlockState;
|
||||
import org.bukkit.entity.Arrow;
|
||||
import org.bukkit.entity.Item;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
|
@ -15,7 +13,6 @@ import org.bukkit.event.Listener;
|
|||
import org.bukkit.event.entity.ItemMergeEvent;
|
||||
import org.bukkit.event.entity.ItemSpawnEvent;
|
||||
import org.bukkit.event.inventory.InventoryPickupItemEvent;
|
||||
import org.bukkit.event.player.PlayerPickupItemEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import java.util.List;
|
||||
|
@ -34,7 +31,8 @@ public class ItemListeners implements Listener {
|
|||
if (!Settings.STACK_ITEMS.getBoolean()) return;
|
||||
|
||||
List<String> disabledWorlds = Settings.DISABLED_WORLDS.getStringList();
|
||||
if (disabledWorlds.stream().anyMatch(worldStr -> event.getEntity().getWorld().getName().equalsIgnoreCase(worldStr))) return;
|
||||
if (disabledWorlds.stream().anyMatch(worldStr -> event.getEntity().getWorld().getName().equalsIgnoreCase(worldStr)))
|
||||
return;
|
||||
|
||||
Item item = event.getTarget();
|
||||
ItemStack itemStack = item.getItemStack();
|
||||
|
@ -67,7 +65,7 @@ public class ItemListeners implements Listener {
|
|||
|
||||
Methods.updateInventory(event.getItem(), event.getInventory());
|
||||
if (event.getInventory().getHolder() instanceof BlockState)
|
||||
BlockUtils.updateAdjacentComparators(((BlockState)event.getInventory().getHolder()).getLocation());
|
||||
BlockUtils.updateAdjacentComparators(((BlockState) event.getInventory().getHolder()).getLocation());
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
||||
|
@ -75,7 +73,8 @@ public class ItemListeners implements Listener {
|
|||
if (!Settings.STACK_ITEMS.getBoolean()) return;
|
||||
|
||||
List<String> disabledWorlds = Settings.DISABLED_WORLDS.getStringList();
|
||||
if (disabledWorlds.stream().anyMatch(worldStr -> event.getEntity().getWorld().getName().equalsIgnoreCase(worldStr))) return;
|
||||
if (disabledWorlds.stream().anyMatch(worldStr -> event.getEntity().getWorld().getName().equalsIgnoreCase(worldStr)))
|
||||
return;
|
||||
|
||||
ItemStack itemStack = event.getEntity().getItemStack();
|
||||
|
||||
|
@ -86,21 +85,4 @@ public class ItemListeners implements Listener {
|
|||
|
||||
UltimateStacker.updateItemAmount(event.getEntity(), itemStack, itemStack.getAmount());
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
||||
public void onPickup(PlayerPickupItemEvent event) {
|
||||
if (!Settings.STACK_ITEMS.getBoolean() || event.getItem() instanceof Arrow) return;
|
||||
// Amount here is not the total amount of item (32 if more than 32) but the amount of item the player can retrieve
|
||||
// ie there is x64 diamonds blocks (so 32), the player pick 8 items so the amount is 8 and not 32
|
||||
|
||||
Item item = event.getItem();
|
||||
ItemStack stack = item.getItemStack();
|
||||
int amount = UltimateStacker.getActualItemAmount(item);
|
||||
if (amount < (stack.getMaxStackSize() / 2)) return;
|
||||
event.setCancelled(true);
|
||||
|
||||
event.getPlayer().playSound(event.getPlayer().getLocation(), CompatibleSound.ENTITY_ITEM_PICKUP.getSound(), .2f, (float) (1 + Math.random()));
|
||||
|
||||
Methods.updateInventory(event.getItem(), event.getPlayer().getInventory());
|
||||
}
|
||||
}
|
|
@ -698,6 +698,13 @@ public class LootablesManager {
|
|||
else {
|
||||
// Add Strider
|
||||
lootManager.addLootable(new Lootable("STRIDER",
|
||||
new LootBuilder()
|
||||
.setMaterial(CompatibleMaterial.STRING)
|
||||
.setMin(0)
|
||||
.setMax(5).build()));
|
||||
|
||||
// Add Hoglin
|
||||
lootManager.addLootable(new Lootable("HOGLIN",
|
||||
new LootBuilder()
|
||||
.setMaterial(CompatibleMaterial.PORKCHOP)
|
||||
.setBurnedMaterial(CompatibleMaterial.COOKED_PORKCHOP)
|
||||
|
@ -708,12 +715,19 @@ public class LootablesManager {
|
|||
.setMin(0)
|
||||
.setMax(2).build()));
|
||||
|
||||
// Add Hoglin
|
||||
lootManager.addLootable(new Lootable("HOGLIN",
|
||||
// Add Zombified Piglin
|
||||
lootManager.addLootable(new Lootable("ZOMBIFIED_PIGLIN",
|
||||
new LootBuilder()
|
||||
.setMaterial(CompatibleMaterial.STRING)
|
||||
.setMaterial(CompatibleMaterial.ROTTEN_FLESH)
|
||||
.setMin(0)
|
||||
.setMax(5).build()));
|
||||
.setMax(1).build(),
|
||||
new LootBuilder()
|
||||
.setMaterial(CompatibleMaterial.GOLD_NUGGET)
|
||||
.setMin(0)
|
||||
.setMax(1).build()));
|
||||
|
||||
// Add Piglin
|
||||
lootManager.addLootable(new Lootable("PIGLIN"));
|
||||
}
|
||||
|
||||
// Add Wither.
|
||||
|
|
Loading…
Reference in New Issue