Skip to content

Instantly share code, notes, and snippets.

@StillManic
Created May 22, 2015 21:44
Show Gist options
  • Save StillManic/892fa3caaac2b4749336 to your computer and use it in GitHub Desktop.
Save StillManic/892fa3caaac2b4749336 to your computer and use it in GitHub Desktop.
public class RCTickHandler {
public static boolean disableTrackItemAnimation = false;
public static float rollAmount = 0.0f;
public static boolean flipped = false;
private Minecraft mc = Minecraft.getMinecraft();
private Field camRoll = ReflectionHelper.findField(EntityRenderer.class, new String[] {"camRoll", "field_78495_O"});
private EntityLivingBase prevViewEntity = mc.renderViewEntity;
private EntityPassenger passenger = null;
@SubscribeEvent
public void receiveTick(TickEvent.PlayerTickEvent event) {
/* This is to disable the downward animation on the current equipped item when switching to a different hotbar slot, if that item is a track.
* I used this to help align the models during rendering.
* To prevent this from executing, set the above disableTrackItemAnimation value to false.
*/
if (disableTrackItemAnimation) {
ItemRenderer itemRenderer = Minecraft.getMinecraft().entityRenderer.itemRenderer;
if (event.player != null && event.player.getCurrentEquippedItem() != null) {
if (event.player.getCurrentEquippedItem().getItem() != null) {
Item item = event.player.getCurrentEquippedItem().getItem();
if (item instanceof ItemBlockTrack) {
if (itemRenderer.equippedItemSlot != -1) {
itemRenderer.prevEquippedProgress = 0f;
itemRenderer.equippedProgress = 0f;
itemRenderer.updateEquippedItem();
itemRenderer.prevEquippedProgress = 1f;
itemRenderer.equippedProgress = 1f;
}
}
}
}
}
//This is to handle/test camera and train car rotation render logic.
if (event.player != null && event.player.getCurrentEquippedItem() != null) {
if (event.player.getCurrentEquippedItem().getItem().equals(RCItems.coin)) {
rollAmount = rollAmount == 361.0f ? rollAmount = -1.0f : rollAmount + 1.0f;
rollCamera(rollAmount);
} else if (event.player.getCurrentEquippedItem().getItem().equals(RCItems.key)) {
rollAmount = rollAmount == -361.0f ? rollAmount = 1.0f : rollAmount - 1.0f;
rollCamera(rollAmount);
} else if (event.player.getCurrentEquippedItem().getItem().equals(RCItems.ticket)) {
if (event.player.rotationPitch == 90.0f) {
event.player.rotationYaw += 180.0f;
event.player.rotationYawHead += 180.0f;
rollAmount = 180.0f;
rollCamera(rollAmount);
flipped = true;
} else if (event.player.rotationPitch == -90.0f) {
event.player.rotationYaw -= 180.0f;
event.player.rotationYawHead -= 180.0f;
rollAmount = 0.0f;
rollCamera(rollAmount);
flipped = false;
}
if (flipped) event.player.rotationPitch -= 1.0f;
else event.player.rotationPitch += 1.0f;
} else if (event.player.getCurrentEquippedItem().getItem().equals(RCItems.pass)) {
if (event.player.rotationPitch == -90.0f) {
event.player.rotationYaw += 180.0f;
rollAmount = 180.0f;
rollCamera(rollAmount);
flipped = true;
} else if (event.player.rotationPitch == 90.0f) {
event.player.rotationYaw -= 180.0f;
rollAmount = 0.0f;
rollCamera(rollAmount);
flipped = false;
}
if (flipped) event.player.rotationPitch += 1.0f;
else event.player.rotationPitch -= 1.0f;
}
} else {
rollAmount = 0.0f;
rollCamera(rollAmount);
}
Vec3 playerPos = event.player.getPosition(1.0f);
Vec3 cornerA = Vec3.createVectorHelper(playerPos.xCoord, playerPos.yCoord - 1.0, playerPos.zCoord);
Vec3 cornerB = Vec3.createVectorHelper(playerPos.xCoord, playerPos.yCoord, playerPos.zCoord);
AxisAlignedBB searchBox = AxisAlignedBB.getBoundingBox(cornerA.xCoord, cornerA.yCoord, cornerA.zCoord, cornerB.xCoord, cornerB.yCoord, cornerB.zCoord);
List<Entity> entities = event.player.worldObj.getEntitiesWithinAABB(EntityTrainDefault2.class, searchBox);
if (event.player != null && event.player.getCurrentEquippedItem() != null) {
if (event.player.getCurrentEquippedItem().getItem().equals(RCItems.balloon)) {
for (Entity e : entities) {
if (e instanceof EntityTrainDefault2) {
EntityTrainDefault2 train = (EntityTrainDefault2) e;
train.changePositionRotationSpeed((float) train.posX, (float) train.posY, (float) train.posZ, true, train.rotationYaw, train.rotationPitch, train.trainCarRoll + 1.0f, true, 0f, true);
}
}
} else if (event.player.getCurrentEquippedItem().getItem().equals(RCItems.empty_brush)) {
for (Entity e : entities) {
if (e instanceof EntityTrainDefault2) {
EntityTrainDefault2 train = (EntityTrainDefault2) e;
train.changePositionRotationSpeed((float) train.posX, (float) train.posY, (float) train.posZ, true, train.rotationYaw, train.rotationPitch, train.trainCarRoll - 1.0f, true, 0f, true);
}
}
} else {
for (Entity e : entities) {
if (e instanceof EntityTrainDefault2) {
EntityTrainDefault2 train = (EntityTrainDefault2) e;
train.changePositionRotationSpeed((float) train.posX, (float) train.posY, (float) train.posZ, true, train.rotationYaw, train.rotationPitch, 0f, true, 0f, true);
}
}
}
} else {
for (Entity e : entities) {
if (e instanceof EntityTrainDefault2) {
EntityTrainDefault2 train = (EntityTrainDefault2) e;
train.changePositionRotationSpeed((float) train.posX, (float) train.posY, (float) train.posZ, true, train.rotationYaw, train.rotationPitch, 0f, true, 0f, true);
}
}
}
if (event.player.ridingEntity == null) {
if (mc.renderViewEntity instanceof EntityPassenger) {
EntityPassenger delete = (EntityPassenger) mc.renderViewEntity;
mc.renderViewEntity = this.prevViewEntity;
mc.theWorld.removeEntity(delete);
}
}
if (event.player.ridingEntity != null) {
if (event.player.ridingEntity instanceof EntityTrainDefault2) {
if (this.passenger == null) this.passenger = new EntityPassenger(event.player.getEntityWorld(), new RCKeyBinding[]{});
this.prevViewEntity = mc.renderViewEntity;
passenger.setPosition(prevViewEntity.posX, prevViewEntity.posY, prevViewEntity.posZ);
prevViewEntity.worldObj.spawnEntityInWorld(passenger);
mc.renderViewEntity = passenger;
passenger.setPositionAndUpdate(event.player.posX, event.player.posY, event.player.posZ);
passenger.rotationYaw = event.player.rotationYaw;
passenger.rotationPitch = event.player.rotationPitch;
passenger.onUpdate();
}
}
//use custom entity to rotate/position camera?
// if (event.player != null) {
// if (event.player.isRiding()) {
// this.player = event.player;
// entityPassenger = new EntityPassenger(event.player.worldObj, null);
//
// if (entityPassenger != null) {
// Minecraft.getMinecraft().theWorld.spawnEntityInWorld(entityPassenger);
//
// entityPassenger.setLocationAndAngles(event.player.posX, event.player.posY + 1.0, event.player.posZ, event.player.rotationYaw, event.player.rotationPitch);
//
// Minecraft.getMinecraft().renderViewEntity = entityPassenger;
// thirdPersonView = Minecraft.getMinecraft().gameSettings.thirdPersonView;
// Minecraft.getMinecraft().gameSettings.thirdPersonView = 8;
//
// entityPassenger.setPositionAndUpdate(0, 5, 0);
// }
// } else {
// Minecraft.getMinecraft().renderViewEntity = event.player;
// Minecraft.getMinecraft().gameSettings.thirdPersonView = thirdPersonView;
// }
// }
}
private void rollCamera(float rollAmount) {
camRoll.setAccessible(true);
try {
camRoll.setFloat(mc.entityRenderer, rollAmount);
} catch (IllegalAccessException e) {
System.out.print("failed to set camRoll");
}
// ObfuscationReflectionHelper.setPrivateValue(EntityRenderer.class, mc.entityRenderer, rollAmount, new String[] {"camRoll", "field_78495_O"});
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment