From f60c8e18d6a4de3898ffc44afc4a126b21351774 Mon Sep 17 00:00:00 2001 From: md_5 Date: Sat, 23 Mar 2013 09:46:33 +1100 Subject: [PATCH] Merge tweaks and configuration This allows the merging of Experience orbs, as well as the configuration of the merge radius of items. Additionally it refactors the merge algorithm to be a better experience for players. diff --git a/src/main/java/net/minecraft/server/EntityItem.java b/src/main/java/net/minecraft/server/EntityItem.java index b3595c8a..5dfdd8ab 100644 --- a/src/main/java/net/minecraft/server/EntityItem.java +++ b/src/main/java/net/minecraft/server/EntityItem.java @@ -142,7 +142,10 @@ public class EntityItem extends Entity { } private void mergeNearby() { - List list = this.world.a(EntityItem.class, this.getBoundingBox().grow(0.5D, 0.0D, 0.5D), (entityitem) -> { + // Spigot start + double radius = world.spigotConfig.itemMerge; + List list = this.world.a(EntityItem.class, this.getBoundingBox().grow(radius, radius, radius), (entityitem) -> { + // Spigot end return entityitem != this && entityitem.z(); }); @@ -176,7 +179,7 @@ public class EntityItem extends Entity { if (itemstack1.getCount() + itemstack.getCount() <= itemstack1.getMaxStackSize()) { if (!(itemstack1.hasTag() ^ itemstack.hasTag())) { if (!itemstack1.hasTag() || itemstack1.getTag().equals(itemstack.getTag())) { - if (itemstack1.getCount() < itemstack.getCount()) { + if (true || itemstack1.getCount() < itemstack.getCount()) { // Spigot a(this, itemstack, entityitem, itemstack1); } else { a(entityitem, itemstack1, this, itemstack); diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java index d191b065..db6d8f23 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java @@ -386,6 +386,23 @@ public class CraftEventFactory { event = CraftEventFactory.callProjectileLaunchEvent(entity); } else if (entity.getBukkitEntity() instanceof org.bukkit.entity.Vehicle){ event = CraftEventFactory.callVehicleCreateEvent(entity); + // Spigot start + } else if (entity instanceof EntityExperienceOrb) { + EntityExperienceOrb xp = (EntityExperienceOrb) entity; + double radius = world.spigotConfig.expMerge; + if (radius > 0) { + List entities = world.getEntities(entity, entity.getBoundingBox().grow(radius, radius, radius)); + for (Entity e : entities) { + if (e instanceof EntityExperienceOrb) { + EntityExperienceOrb loopItem = (EntityExperienceOrb) e; + if (!loopItem.dead) { + xp.value += loopItem.value; + loopItem.die(); + } + } + } + } + // Spigot end } else if (!(entity instanceof EntityPlayer)) { event = CraftEventFactory.callEntitySpawnEvent(entity); } diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java index 8763048a..23ce7243 100644 --- a/src/main/java/org/spigotmc/SpigotWorldConfig.java +++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java @@ -111,4 +111,18 @@ public class SpigotWorldConfig vineModifier = getAndValidateGrowth( "Vine" ); cocoaModifier = getAndValidateGrowth( "Cocoa" ); } + + public double itemMerge; + private void itemMerge() + { + itemMerge = getDouble("merge-radius.item", 2.5 ); + log( "Item Merge Radius: " + itemMerge ); + } + + public double expMerge; + private void expMerge() + { + expMerge = getDouble("merge-radius.exp", 3.0 ); + log( "Experience Merge Radius: " + expMerge ); + } } -- 2.20.1