From 41f7ec8e8d70575f5afe8030a20aa55ae835cb99 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 e1475356..244256f3 100644 --- a/src/main/java/net/minecraft/server/EntityItem.java +++ b/src/main/java/net/minecraft/server/EntityItem.java @@ -158,7 +158,10 @@ public class EntityItem extends Entity { private void mergeNearby() { if (this.z()) { - 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(); }); Iterator iterator = list.iterator(); @@ -188,7 +191,7 @@ public class EntityItem extends Entity { ItemStack itemstack1 = entityitem.getItemStack(); if (Objects.equals(this.getOwner(), entityitem.getOwner()) && a(itemstack, itemstack1)) { - 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 f9d90a45..e931703a 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java @@ -575,6 +575,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 fb9c4fc7..8c855cf9 100644 --- a/src/main/java/org/spigotmc/SpigotWorldConfig.java +++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java @@ -128,4 +128,18 @@ public class SpigotWorldConfig sweetBerryModifier = getAndValidateGrowth( "SweetBerry" ); kelpModifier = getAndValidateGrowth( "Kelp" ); } + + 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.25.1