Merge branch 'development'

This commit is contained in:
Brianna 2020-08-05 15:50:34 -05:00
commit 7a667a1ffa
7 changed files with 123 additions and 38 deletions

View File

@ -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>

View File

@ -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())

View File

@ -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) {

View File

@ -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);
}
}
}

View File

@ -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());
}
}

View File

@ -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());
}
}

View File

@ -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.