From f7e629b6bc15ddc9a3ed094d6393dd77dc3c8248 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/world/entity/item/EntityItem.java b/src/main/java/net/minecraft/world/entity/item/EntityItem.java index 26ccf8d33..2e93c1e67 100644 --- a/src/main/java/net/minecraft/world/entity/item/EntityItem.java +++ b/src/main/java/net/minecraft/world/entity/item/EntityItem.java @@ -199,7 +199,10 @@ public class EntityItem extends Entity { private void mergeWithNeighbours() { if (this.isMergable()) { - List list = this.level.getEntitiesOfClass(EntityItem.class, this.getBoundingBox().inflate(0.5D, 0.0D, 0.5D), (entityitem) -> { + // Spigot start + double radius = level.spigotConfig.itemMerge; + List list = this.level.getEntitiesOfClass(EntityItem.class, this.getBoundingBox().inflate(radius, radius, radius), (entityitem) -> { + // Spigot end return entityitem != this && entityitem.isMergable(); }); Iterator iterator = list.iterator(); @@ -229,7 +232,7 @@ public class EntityItem extends Entity { ItemStack itemstack1 = entityitem.getItem(); if (Objects.equals(this.getOwner(), entityitem.getOwner()) && areMergable(itemstack, itemstack1)) { - if (itemstack1.getCount() < itemstack.getCount()) { + if (true || itemstack1.getCount() < itemstack.getCount()) { // Spigot merge(this, itemstack, entityitem, itemstack1); } else { merge(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 9b4c6c130..6ff3a2440 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java @@ -626,6 +626,23 @@ public class CraftEventFactory { return true; } event = CraftEventFactory.callLightningStrikeEvent((LightningStrike) entity.getBukkitEntity(), cause); + // 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().inflate(radius, radius, radius)); + for (Entity e : entities) { + if (e instanceof EntityExperienceOrb) { + EntityExperienceOrb loopItem = (EntityExperienceOrb) e; + if (!loopItem.isRemoved()) { + xp.value += loopItem.value; + loopItem.discard(); + } + } + } + } + // 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 fb9c4fc78..8c855cf9b 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