Implement Rabbit types.
Dieser Commit ist enthalten in:
Ursprung
81ab957aa5
Commit
2db3ea29a6
@ -1,5 +1,5 @@
|
||||
--- ../work/decompile-8eb82bde//net/minecraft/server/EntityInsentient.java 2014-11-28 17:43:43.105707435 +0000
|
||||
+++ src/main/java/net/minecraft/server/EntityInsentient.java 2014-11-28 17:38:23.000000000 +0000
|
||||
--- ../work/decompile-8eb82bde//net/minecraft/server/EntityInsentient.java Sat Dec 6 21:48:11 2014
|
||||
+++ src/main/java/net/minecraft/server/EntityInsentient.java Sat Dec 6 21:18:38 2014
|
||||
@@ -4,6 +4,15 @@
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
@ -16,6 +16,17 @@
|
||||
public abstract class EntityInsentient extends EntityLiving {
|
||||
|
||||
public int a_;
|
||||
@@ -13,8 +22,8 @@
|
||||
protected ControllerJump g;
|
||||
private EntityAIBodyControl b;
|
||||
protected NavigationAbstract navigation;
|
||||
- protected final PathfinderGoalSelector goalSelector;
|
||||
- protected final PathfinderGoalSelector targetSelector;
|
||||
+ public PathfinderGoalSelector goalSelector; // PAIL protected final to public
|
||||
+ public PathfinderGoalSelector targetSelector; // PAIL protected final to public
|
||||
private EntityLiving goalTarget;
|
||||
private EntitySenses bi;
|
||||
private ItemStack[] equipment = new ItemStack[5];
|
||||
@@ -39,7 +48,9 @@
|
||||
for (int i = 0; i < this.dropChances.length; ++i) {
|
||||
this.dropChances[i] = 0.085F;
|
||||
@ -161,4 +172,4 @@
|
||||
+ this.world.getServer().getPluginManager().callEvent(new EntityUnleashEvent(this.getBukkitEntity(), UnleashReason.UNKNOWN)); // CraftBukkit
|
||||
this.unleash(false, true);
|
||||
}
|
||||
}
|
||||
}
|
25
nms-patches/EntityRabbit.patch
Normale Datei
25
nms-patches/EntityRabbit.patch
Normale Datei
@ -0,0 +1,25 @@
|
||||
--- ../work/decompile-8eb82bde//net/minecraft/server/EntityRabbit.java Sat Dec 6 21:44:10 2014
|
||||
+++ src/main/java/net/minecraft/server/EntityRabbit.java Sat Dec 6 21:33:23 2014
|
||||
@@ -21,6 +21,12 @@
|
||||
this.g = new ControllerJumpRabbit(this, this);
|
||||
this.moveController = new ControllerMoveRabbit(this);
|
||||
((Navigation) this.getNavigation()).a(true);
|
||||
+ this.initializePathFinderGoals(); // CraftBukkit - moved code
|
||||
+ this.b(0.0D);
|
||||
+ }
|
||||
+
|
||||
+ // CraftBukkit start - code from constructor
|
||||
+ public void initializePathFinderGoals(){
|
||||
this.navigation.a(2.5F);
|
||||
this.goalSelector.a(1, new PathfinderGoalFloat(this));
|
||||
this.goalSelector.a(1, new PathfinderGoalRabbitPanic(this, 1.33D));
|
||||
@@ -31,8 +37,8 @@
|
||||
this.goalSelector.a(11, new PathfinderGoalLookAtPlayer(this, EntityHuman.class, 10.0F));
|
||||
this.bk = new PathfinderGoalRabbitAvoidTarget(this, new EntitySelectorRabbitWolf(this), 16.0F, 1.33D, 1.33D);
|
||||
this.goalSelector.a(4, this.bk);
|
||||
- this.b(0.0D);
|
||||
}
|
||||
+ // CraftBukkit end
|
||||
|
||||
protected float bD() {
|
||||
return this.moveController.a() && this.moveController.e() > this.locY + 0.5D ? 0.5F : this.br.b();
|
@ -1,9 +1,12 @@
|
||||
package org.bukkit.craftbukkit.entity;
|
||||
|
||||
import net.minecraft.server.World;
|
||||
import net.minecraft.server.EntityRabbit;
|
||||
import net.minecraft.server.PathfinderGoalSelector;
|
||||
import org.bukkit.craftbukkit.CraftServer;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.Rabbit;
|
||||
import org.bukkit.craftbukkit.CraftWorld;
|
||||
|
||||
public class CraftRabbit extends CraftAnimals implements Rabbit {
|
||||
|
||||
@ -11,13 +14,75 @@ public class CraftRabbit extends CraftAnimals implements Rabbit {
|
||||
super(server, entity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EntityRabbit getHandle() {
|
||||
return (EntityRabbit) entity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "CraftRabbit";
|
||||
return "CraftRabbit{RabbitType=" + getRabbitType() + "}";
|
||||
}
|
||||
|
||||
@Override
|
||||
public EntityType getType() {
|
||||
return EntityType.RABBIT;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Type getRabbitType() {
|
||||
int type = getHandle().cl();
|
||||
return CraftMagicMapping.fromMagic(type);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setRabbitType(Type type) {
|
||||
EntityRabbit entity = getHandle();
|
||||
if (getRabbitType() == Type.THE_KILLER_BUNNY) {
|
||||
// Reset goals and target finders.
|
||||
World world = ((CraftWorld) this.getWorld()).getHandle();
|
||||
entity.goalSelector = new PathfinderGoalSelector(world != null && world.methodProfiler != null ? world.methodProfiler : null);
|
||||
entity.targetSelector = new PathfinderGoalSelector(world != null && world.methodProfiler != null ? world.methodProfiler : null);
|
||||
entity.initializePathFinderGoals();
|
||||
}
|
||||
|
||||
entity.r(CraftMagicMapping.toMagic(type)); // PAIL: Rename
|
||||
}
|
||||
|
||||
private static class CraftMagicMapping {
|
||||
|
||||
private static final int[] types = new int[Type.values().length];
|
||||
private static final Type[] reverse = new Type[Type.values().length];
|
||||
|
||||
static {
|
||||
set(Type.BROWN, 0);
|
||||
set(Type.WHITE, 1);
|
||||
set(Type.BLACK, 2);
|
||||
set(Type.BLACK_AND_WHITE, 3);
|
||||
set(Type.GOLD, 4);
|
||||
set(Type.SALT_AND_PEPPER, 5);
|
||||
set(Type.THE_KILLER_BUNNY, 99);
|
||||
}
|
||||
|
||||
private static void set(Type type, int value) {
|
||||
types[type.ordinal()] = value;
|
||||
if (value < reverse.length) {
|
||||
reverse[value] = type;
|
||||
}
|
||||
}
|
||||
|
||||
public static Type fromMagic(int magic) {
|
||||
if (magic > 0 && magic < reverse.length) {
|
||||
return reverse[magic];
|
||||
} else if (magic == 99) {
|
||||
return Type.THE_KILLER_BUNNY;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static int toMagic(Type type) {
|
||||
return types[type.ordinal()];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
In neuem Issue referenzieren
Einen Benutzer sperren