mirror of
https://github.com/PaperMC/Paper.git
synced 2025-01-01 17:01:56 +01:00
a18bcfaf43
Tick a hopper only if certain conditions have changed i.e. inventory changes, redstone updates, etc.
94 lines
No EOL
4.5 KiB
Diff
94 lines
No EOL
4.5 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: md_5 <md_5@live.com.au>
|
|
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 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
|
--- a/src/main/java/net/minecraft/server/EntityItem.java
|
|
+++ b/src/main/java/net/minecraft/server/EntityItem.java
|
|
@@ -0,0 +0,0 @@ public class EntityItem extends Entity {
|
|
}
|
|
|
|
private void w() {
|
|
- Iterator iterator = this.world.a(EntityItem.class, this.getBoundingBox().grow(0.5D, 0.0D, 0.5D)).iterator();
|
|
+ // Spigot start
|
|
+ double radius = world.spigotConfig.itemMerge;
|
|
+ Iterator iterator = this.world.a(EntityItem.class, this.getBoundingBox().grow(radius, radius, radius)).iterator();
|
|
+ // Spigot end
|
|
|
|
while (iterator.hasNext()) {
|
|
EntityItem entityitem = (EntityItem) iterator.next();
|
|
@@ -0,0 +0,0 @@ public class EntityItem extends Entity {
|
|
} else if (itemstack1.count + itemstack.count > itemstack1.getMaxStackSize()) {
|
|
return false;
|
|
} else {
|
|
- itemstack1.count += itemstack.count;
|
|
- entityitem.pickupDelay = Math.max(entityitem.pickupDelay, this.pickupDelay);
|
|
- entityitem.age = Math.min(entityitem.age, this.age);
|
|
- entityitem.setItemStack(itemstack1);
|
|
- this.die();
|
|
+ // Spigot start
|
|
+ itemstack.count += itemstack1.count;
|
|
+ this.pickupDelay = Math.max(entityitem.pickupDelay, this.pickupDelay);
|
|
+ this.age = Math.min(entityitem.age, this.age);
|
|
+ this.setItemStack(itemstack);
|
|
+ entityitem.die();
|
|
+ // Spigot end
|
|
return true;
|
|
}
|
|
} else {
|
|
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java
|
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
|
--- a/src/main/java/net/minecraft/server/World.java
|
|
+++ b/src/main/java/net/minecraft/server/World.java
|
|
@@ -0,0 +0,0 @@ public abstract class World implements IBlockAccess {
|
|
// Not all projectiles extend EntityProjectile, so check for Bukkit interface instead
|
|
event = CraftEventFactory.callProjectileLaunchEvent(entity);
|
|
}
|
|
+ // Spigot start
|
|
+ else if (entity instanceof EntityExperienceOrb) {
|
|
+ EntityExperienceOrb xp = (EntityExperienceOrb) entity;
|
|
+ double radius = spigotConfig.expMerge;
|
|
+ if (radius > 0) {
|
|
+ List<Entity> entities = this.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
|
|
|
|
if (event != null && (event.isCancelled() || entity.dead)) {
|
|
entity.dead = true;
|
|
diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
|
index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 100644
|
|
--- a/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
|
+++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
|
@@ -0,0 +0,0 @@ public class SpigotWorldConfig
|
|
wheatModifier = getAndValidateGrowth( "Wheat" );
|
|
wartModifier = getAndValidateGrowth( "NetherWart" );
|
|
}
|
|
+
|
|
+ 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 );
|
|
+ }
|
|
}
|
|
--
|