Skip to content

Commit

Permalink
Make slime movement more natural
Browse files Browse the repository at this point in the history
  • Loading branch information
fullwall committed Oct 31, 2015
1 parent 287d4eb commit dec54cb
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@
import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.util.NMS;
import net.citizensnpcs.util.Util;
import net.citizensnpcs.util.nms.PlayerControllerMove;
import net.minecraft.server.v1_8_R3.Block;
import net.minecraft.server.v1_8_R3.BlockPosition;
import net.minecraft.server.v1_8_R3.ControllerMove;
import net.minecraft.server.v1_8_R3.EntityMagmaCube;
import net.minecraft.server.v1_8_R3.NBTTagCompound;
import net.minecraft.server.v1_8_R3.World;
Expand Down Expand Up @@ -44,7 +44,7 @@ public EntityMagmaCubeNPC(World world, NPC npc) {
if (npc != null) {
setSize(3);
NMS.clearGoals(goalSelector, targetSelector);
this.moveController = new ControllerMove(this);
this.moveController = new PlayerControllerMove(this);
}
}

Expand Down
18 changes: 9 additions & 9 deletions src/main/java/net/citizensnpcs/npc/entity/SlimeController.java
Original file line number Diff line number Diff line change
@@ -1,27 +1,27 @@
package net.citizensnpcs.npc.entity;

import org.bukkit.Bukkit;
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftSlime;
import org.bukkit.entity.Slime;
import org.bukkit.util.Vector;

import net.citizensnpcs.api.event.NPCPushEvent;
import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.CitizensNPC;
import net.citizensnpcs.npc.MobEntityController;
import net.citizensnpcs.npc.ai.NPCHolder;
import net.citizensnpcs.util.NMS;
import net.citizensnpcs.util.Util;
import net.citizensnpcs.util.nms.PlayerControllerMove;
import net.minecraft.server.v1_8_R3.Block;
import net.minecraft.server.v1_8_R3.BlockPosition;
import net.minecraft.server.v1_8_R3.ControllerMove;
import net.minecraft.server.v1_8_R3.EntityHuman;
import net.minecraft.server.v1_8_R3.EntitySlime;
import net.minecraft.server.v1_8_R3.NBTTagCompound;
import net.minecraft.server.v1_8_R3.World;

import org.bukkit.Bukkit;
import org.bukkit.craftbukkit.v1_8_R3.CraftServer;
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_8_R3.entity.CraftSlime;
import org.bukkit.entity.Slime;
import org.bukkit.util.Vector;

public class SlimeController extends MobEntityController {

public SlimeController() {
Expand All @@ -46,7 +46,7 @@ public EntitySlimeNPC(World world, NPC npc) {
if (npc != null) {
setSize(3);
NMS.clearGoals(goalSelector, targetSelector);
this.moveController = new ControllerMove(this);
this.moveController = new PlayerControllerMove(this);
}
}

Expand Down
52 changes: 45 additions & 7 deletions src/main/java/net/citizensnpcs/util/nms/PlayerControllerMove.java
Original file line number Diff line number Diff line change
@@ -1,32 +1,43 @@
package net.citizensnpcs.util.nms;

import java.util.Random;

import org.bukkit.craftbukkit.v1_8_R3.TrigMath;

import net.citizensnpcs.npc.entity.EntityHumanNPC;
import net.citizensnpcs.util.NMS;
import net.minecraft.server.v1_8_R3.AttributeInstance;
import net.minecraft.server.v1_8_R3.ControllerMove;
import net.minecraft.server.v1_8_R3.EntityInsentient;
import net.minecraft.server.v1_8_R3.EntityLiving;
import net.minecraft.server.v1_8_R3.EntitySlime;
import net.minecraft.server.v1_8_R3.GenericAttributes;
import net.minecraft.server.v1_8_R3.MathHelper;

import org.bukkit.craftbukkit.v1_8_R3.TrigMath;

public class PlayerControllerMove {
protected EntityHumanNPC a;
public class PlayerControllerMove extends ControllerMove {
protected EntityLiving a;
protected double b;
protected double c;
protected double d;
protected double e;
protected boolean f;
private int h;

public PlayerControllerMove(EntityHumanNPC entityinsentient) {
public PlayerControllerMove(EntityLiving entityinsentient) {
super(entityinsentient instanceof EntityInsentient ? (EntityInsentient) entityinsentient
: new EntitySlime(entityinsentient.world));
this.a = entityinsentient;
this.b = entityinsentient.locX;
this.c = entityinsentient.locY;
this.d = entityinsentient.locZ;
}

@Override
public boolean a() {
return this.f;
}

@Override
public void a(double d0, double d1, double d2, double d3) {
this.b = d0;
this.c = d1;
Expand All @@ -35,6 +46,7 @@ public void a(double d0, double d1, double d2, double d3) {
this.f = true;
}

@Override
protected float a(float f, float f1, float f2) {
float f3 = MathHelper.g(f1 - f);

Expand All @@ -57,10 +69,12 @@ else if (f4 > 360.0F) {
return f4;
}

@Override
public double b() {
return this.e;
}

@Override
public void c() {
this.a.ba = 0F;
if (this.f) {
Expand All @@ -80,21 +94,45 @@ public void c() {
speed.setValue(0.1D * this.e);
float movement = (float) (this.e * speed.getValue()) * 10;
this.a.ba = movement;
if ((d2 > 0.0D) && (d0 * d0 + d1 * d1 < 1.0D))
this.a.getControllerJump().a();
if (shouldSlimeJump() || ((d2 > 0.0D) && (d0 * d0 + d1 * d1 < 1.0D))) {
this.h = cg();
this.h /= 3;
if (this.a instanceof EntityHumanNPC) {
((EntityHumanNPC) this.a).getControllerJump().a();
} else {
((EntityInsentient) this.a).getControllerJump().a();
}
}
}
}
}

protected int cg() {
return new Random().nextInt(20) + 10;
}

@Override
public double d() {
return this.b;
}

@Override
public double e() {
return this.c;
}

@Override
public double f() {
return this.d;
}

private boolean shouldSlimeJump() {
if (!(this.a instanceof EntitySlime)) {
return false;
}
if (this.h-- <= 0) {
return true;
}
return false;
}
}

0 comments on commit dec54cb

Please sign in to comment.