Created
May 22, 2015 21:44
-
-
Save StillManic/892fa3caaac2b4749336 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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