Compare commits
12 Commits
1.10.2-2.1
...
1.11.2-2.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5dd31f4cac | ||
|
|
2a47f579a9 | ||
|
|
cda8493df1 | ||
|
|
0c36022b47 | ||
|
|
33cb1405d5 | ||
|
|
b6cf42c3be | ||
|
|
503b308043 | ||
|
|
7b491d188d | ||
|
|
fb4140a123 | ||
|
|
2428c01c9c | ||
|
|
260720d5ba | ||
|
|
58b7c44a33 |
Submodule ReplayStudio updated: 98bbf92b9d...d066d7e210
@@ -34,9 +34,9 @@ archivesBaseName = "replaymod"
|
||||
|
||||
minecraft {
|
||||
coreMod = 'com.replaymod.core.LoadingPlugin'
|
||||
version = '1.10.2-12.18.2.2099'
|
||||
version = '1.11.2-13.20.0.2216'
|
||||
runDir = "eclipse"
|
||||
mappings = "snapshot_20160518"
|
||||
mappings = "snapshot_20161220"
|
||||
replace '@MOD_VERSION@', project.version
|
||||
replace '@MC_VERSION@', project.minecraft.version
|
||||
}
|
||||
|
||||
2
jGui
2
jGui
Submodule jGui updated: e2bd90628e...bd3fa93d7d
@@ -34,7 +34,7 @@ public class SpectatePlayer extends AbstractTask {
|
||||
future.setException(new TimeoutException("Camera hasn't stopped spectating."));
|
||||
return;
|
||||
}
|
||||
if (mc.getRenderViewEntity() == mc.thePlayer) {
|
||||
if (mc.getRenderViewEntity() == mc.player) {
|
||||
future.set(null);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@ public class Restrictions {
|
||||
public String handle(SPacketCustomPayload packet) {
|
||||
PacketBuffer buffer = packet.getBufferData();
|
||||
while (buffer.isReadable()) {
|
||||
String name = buffer.readStringFromBuffer(64);
|
||||
String name = buffer.readString(64);
|
||||
boolean active = buffer.readBoolean();
|
||||
// if ("no_xray".equals(name)) {
|
||||
// noXray = active;
|
||||
|
||||
@@ -36,7 +36,7 @@ public class PlayerOverview implements Extra {
|
||||
public void run() {
|
||||
if (module.getReplayHandler() != null) {
|
||||
@SuppressWarnings("unchecked")
|
||||
List<EntityPlayer> players = mod.getMinecraft().theWorld.getPlayers(EntityPlayer.class, new Predicate() {
|
||||
List<EntityPlayer> players = mod.getMinecraft().world.getPlayers(EntityPlayer.class, new Predicate() {
|
||||
@Override
|
||||
public boolean apply(Object input) {
|
||||
return !(input instanceof CameraEntity); // Exclude the camera entity
|
||||
|
||||
@@ -4,7 +4,9 @@ public enum MinecraftVersion {
|
||||
|
||||
MC_1_8("Minecraft 1.8", "1.8"),
|
||||
MC_1_9_4("Minecraft 1.9.4", "1.9.4"),
|
||||
MC_1_10_2("Minecraft 1.10.2", "1.10.2");
|
||||
MC_1_10_2("Minecraft 1.10.2", "1.10.2"),
|
||||
MC_1_11("Minecraft 1.11", "1.11"),
|
||||
MC_1_11_2("Minecraft 1.11.2", "1.11.2");
|
||||
|
||||
private String niceName, apiName;
|
||||
|
||||
|
||||
@@ -66,6 +66,9 @@ public class ConnectionEventHandler {
|
||||
worldName = mc.getIntegratedServer().getWorldName();
|
||||
} else if (Minecraft.getMinecraft().getCurrentServerData() != null) {
|
||||
worldName = Minecraft.getMinecraft().getCurrentServerData().serverIP;
|
||||
} else if (Minecraft.getMinecraft().isConnectedToRealms()) {
|
||||
// we can't access the server name without tapping too deep in the Realms Library
|
||||
worldName = "A Realms Server";
|
||||
} else {
|
||||
logger.info("Recording not started as the world is neither local nor remote (probably a replay).");
|
||||
return;
|
||||
|
||||
@@ -57,7 +57,7 @@ public class RecordingEventHandler {
|
||||
|
||||
public void onPlayerJoin() {
|
||||
try {
|
||||
packetListener.save(new SPacketSpawnPlayer(mc.thePlayer));
|
||||
packetListener.save(new SPacketSpawnPlayer(mc.player));
|
||||
} catch(Exception e1) {
|
||||
e1.printStackTrace();
|
||||
}
|
||||
@@ -65,7 +65,7 @@ public class RecordingEventHandler {
|
||||
|
||||
public void onPlayerRespawn() {
|
||||
try {
|
||||
packetListener.save(new SPacketSpawnPlayer(mc.thePlayer));
|
||||
packetListener.save(new SPacketSpawnPlayer(mc.player));
|
||||
} catch(Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
@@ -93,7 +93,7 @@ public class RecordingEventHandler {
|
||||
@SubscribeEvent
|
||||
public void onPlayerTick(PlayerTickEvent e) {
|
||||
try {
|
||||
if(e.player != mc.thePlayer) return;
|
||||
if(e.player != mc.player) return;
|
||||
|
||||
boolean force = false;
|
||||
if(lastX == null || lastY == null || lastZ == null) {
|
||||
@@ -168,62 +168,62 @@ public class RecordingEventHandler {
|
||||
*/
|
||||
|
||||
//Inventory Handling
|
||||
if (playerItems[0] != mc.thePlayer.getHeldItem(EnumHand.MAIN_HAND)) {
|
||||
playerItems[0] = mc.thePlayer.getHeldItem(EnumHand.MAIN_HAND);
|
||||
if (playerItems[0] != mc.player.getHeldItem(EnumHand.MAIN_HAND)) {
|
||||
playerItems[0] = mc.player.getHeldItem(EnumHand.MAIN_HAND);
|
||||
packetListener.save(new SPacketEntityEquipment(e.player.getEntityId(), EntityEquipmentSlot.MAINHAND, playerItems[0]));
|
||||
}
|
||||
|
||||
if (playerItems[1] != mc.thePlayer.getHeldItem(EnumHand.OFF_HAND)) {
|
||||
playerItems[1] = mc.thePlayer.getHeldItem(EnumHand.OFF_HAND);
|
||||
if (playerItems[1] != mc.player.getHeldItem(EnumHand.OFF_HAND)) {
|
||||
playerItems[1] = mc.player.getHeldItem(EnumHand.OFF_HAND);
|
||||
packetListener.save(new SPacketEntityEquipment(e.player.getEntityId(), EntityEquipmentSlot.OFFHAND, playerItems[1]));
|
||||
}
|
||||
|
||||
if (playerItems[2] != mc.thePlayer.inventory.armorInventory[0]) {
|
||||
playerItems[2] = mc.thePlayer.inventory.armorInventory[0];
|
||||
if (playerItems[2] != mc.player.getItemStackFromSlot(EntityEquipmentSlot.FEET)) {
|
||||
playerItems[2] = mc.player.getItemStackFromSlot(EntityEquipmentSlot.FEET);
|
||||
packetListener.save(new SPacketEntityEquipment(e.player.getEntityId(), EntityEquipmentSlot.FEET, playerItems[2]));
|
||||
}
|
||||
|
||||
if (playerItems[3] != mc.thePlayer.inventory.armorInventory[1]) {
|
||||
playerItems[3] = mc.thePlayer.inventory.armorInventory[1];
|
||||
if (playerItems[3] != mc.player.getItemStackFromSlot(EntityEquipmentSlot.LEGS)) {
|
||||
playerItems[3] = mc.player.getItemStackFromSlot(EntityEquipmentSlot.LEGS);
|
||||
packetListener.save(new SPacketEntityEquipment(e.player.getEntityId(), EntityEquipmentSlot.LEGS, playerItems[3]));
|
||||
}
|
||||
|
||||
if (playerItems[4] != mc.thePlayer.inventory.armorInventory[2]) {
|
||||
playerItems[4] = mc.thePlayer.inventory.armorInventory[2];
|
||||
if (playerItems[4] != mc.player.getItemStackFromSlot(EntityEquipmentSlot.CHEST)) {
|
||||
playerItems[4] = mc.player.getItemStackFromSlot(EntityEquipmentSlot.CHEST);
|
||||
packetListener.save(new SPacketEntityEquipment(e.player.getEntityId(), EntityEquipmentSlot.CHEST, playerItems[4]));
|
||||
}
|
||||
|
||||
if (playerItems[5] != mc.thePlayer.inventory.armorInventory[3]) {
|
||||
playerItems[5] = mc.thePlayer.inventory.armorInventory[3];
|
||||
if (playerItems[5] != mc.player.getItemStackFromSlot(EntityEquipmentSlot.HEAD)) {
|
||||
playerItems[5] = mc.player.getItemStackFromSlot(EntityEquipmentSlot.HEAD);
|
||||
packetListener.save(new SPacketEntityEquipment(e.player.getEntityId(), EntityEquipmentSlot.HEAD, playerItems[5]));
|
||||
}
|
||||
|
||||
//Leaving Ride
|
||||
|
||||
if((!mc.thePlayer.isRiding() && lastRiding != -1) ||
|
||||
(mc.thePlayer.isRiding() && lastRiding != mc.thePlayer.getRidingEntity().getEntityId())) {
|
||||
if(!mc.thePlayer.isRiding()) {
|
||||
if((!mc.player.isRiding() && lastRiding != -1) ||
|
||||
(mc.player.isRiding() && lastRiding != mc.player.getRidingEntity().getEntityId())) {
|
||||
if(!mc.player.isRiding()) {
|
||||
lastRiding = -1;
|
||||
} else {
|
||||
lastRiding = mc.thePlayer.getRidingEntity().getEntityId();
|
||||
lastRiding = mc.player.getRidingEntity().getEntityId();
|
||||
}
|
||||
packetListener.save(new SPacketEntityAttach(e.player, e.player.getRidingEntity()));
|
||||
}
|
||||
|
||||
//Sleeping
|
||||
if(!mc.thePlayer.isPlayerSleeping() && wasSleeping) {
|
||||
if(!mc.player.isPlayerSleeping() && wasSleeping) {
|
||||
packetListener.save(new SPacketAnimation(e.player, 2));
|
||||
wasSleeping = false;
|
||||
}
|
||||
|
||||
// Active hand (e.g. eating, drinking, blocking)
|
||||
if (mc.thePlayer.isHandActive() ^ wasHandActive || mc.thePlayer.getActiveHand() != lastActiveHand) {
|
||||
wasHandActive = mc.thePlayer.isHandActive();
|
||||
lastActiveHand = mc.thePlayer.getActiveHand();
|
||||
if (mc.player.isHandActive() ^ wasHandActive || mc.player.getActiveHand() != lastActiveHand) {
|
||||
wasHandActive = mc.player.isHandActive();
|
||||
lastActiveHand = mc.player.getActiveHand();
|
||||
EntityDataManager dataManager = new EntityDataManager(null);
|
||||
int state = (wasHandActive ? 1 : 0) | (lastActiveHand == EnumHand.OFF_HAND ? 2 : 0);
|
||||
dataManager.register(EntityLiving.HAND_STATES, (byte) state);
|
||||
packetListener.save(new SPacketEntityMetadata(mc.thePlayer.getEntityId(), dataManager, true));
|
||||
packetListener.save(new SPacketEntityMetadata(mc.player.getEntityId(), dataManager, true));
|
||||
}
|
||||
|
||||
} catch(Exception e1) {
|
||||
@@ -234,7 +234,8 @@ public class RecordingEventHandler {
|
||||
@SubscribeEvent
|
||||
public void onPickupItem(ItemPickupEvent event) {
|
||||
try {
|
||||
packetListener.save(new SPacketCollectItem(event.pickedUp.getEntityId(), event.player.getEntityId()));
|
||||
packetListener.save(new SPacketCollectItem(event.pickedUp.getEntityId(), event.player.getEntityId(),
|
||||
event.pickedUp.getEntityItem().getMaxStackSize()));
|
||||
} catch(Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
@@ -243,7 +244,7 @@ public class RecordingEventHandler {
|
||||
@SubscribeEvent
|
||||
public void onSleep(PlayerSleepInBedEvent event) {
|
||||
try {
|
||||
if (event.getEntityPlayer() != mc.thePlayer) {
|
||||
if (event.getEntityPlayer() != mc.player) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -259,7 +260,7 @@ public class RecordingEventHandler {
|
||||
@SubscribeEvent
|
||||
public void enterMinecart(MinecartInteractEvent event) {
|
||||
try {
|
||||
if(event.getEntity() != mc.thePlayer) {
|
||||
if(event.getEntity() != mc.player) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -272,7 +273,7 @@ public class RecordingEventHandler {
|
||||
}
|
||||
|
||||
public void onBlockBreakAnim(int breakerId, BlockPos pos, int progress) {
|
||||
EntityPlayer thePlayer = mc.thePlayer;
|
||||
EntityPlayer thePlayer = mc.player;
|
||||
if (thePlayer != null && breakerId == thePlayer.getEntityId()) {
|
||||
packetListener.save(new SPacketBlockBreakAnim(breakerId, pos, progress));
|
||||
}
|
||||
|
||||
@@ -37,14 +37,14 @@ public abstract class MixinNetHandlerPlayClient {
|
||||
*/
|
||||
@Inject(method = "handlePlayerListItem", at=@At("HEAD"))
|
||||
public void recordOwnJoin(SPacketPlayerListItem packet, CallbackInfo ci) {
|
||||
if (gameController.thePlayer == null) return;
|
||||
if (gameController.player == null) return;
|
||||
|
||||
RecordingEventHandler handler = getRecordingEventHandler();
|
||||
if (handler != null && packet.getAction() == SPacketPlayerListItem.Action.ADD_PLAYER) {
|
||||
for (SPacketPlayerListItem.AddPlayerData data : packet.getEntries()) {
|
||||
if (data.getProfile() == null || data.getProfile().getId() == null) continue;
|
||||
// Only add spawn packet for our own player and only if he isn't known yet
|
||||
if (data.getProfile().getId().equals(Minecraft.getMinecraft().thePlayer.getGameProfile().getId())
|
||||
if (data.getProfile().getId().equals(Minecraft.getMinecraft().player.getGameProfile().getId())
|
||||
&& !playerInfoMap.containsKey(data.getProfile().getId())) {
|
||||
handler.onPlayerJoin();
|
||||
}
|
||||
|
||||
@@ -23,6 +23,6 @@ public abstract class MixinPlayerControllerMP implements RecordingEventHandler.R
|
||||
@Redirect(method = "onPlayerDestroyBlock", at = @At(value = "INVOKE",
|
||||
target = "Lnet/minecraft/world/World;playEvent(ILnet/minecraft/util/math/BlockPos;I)V"))
|
||||
public void replayModRecording_playEvent_fixed(World world, int type, BlockPos pos, int data) {
|
||||
world.playEvent(mc.thePlayer, type, pos, data);
|
||||
world.playEvent(mc.player, type, pos, data);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,7 +38,7 @@ public abstract class MixinWorldClient extends World implements RecordingEventHa
|
||||
@Inject(method = "playSound", at = @At("HEAD"))
|
||||
public void replayModRecording_recordClientSound(EntityPlayer player, double x, double y, double z, SoundEvent sound, SoundCategory category,
|
||||
float volume, float pitch, CallbackInfo ci) {
|
||||
if (player == mc.thePlayer) {
|
||||
if (player == mc.player) {
|
||||
RecordingEventHandler handler = replayModRecording_getRecordingEventHandler();
|
||||
if (handler != null) {
|
||||
handler.onClientSound(sound, category, x, y, z, volume, pitch);
|
||||
@@ -50,7 +50,7 @@ public abstract class MixinWorldClient extends World implements RecordingEventHa
|
||||
// These are handled in the World class, so we override the method in WorldClient and add our special handling.
|
||||
@Override
|
||||
public void playEvent(EntityPlayer player, int type, BlockPos pos, int data) {
|
||||
if (player == mc.thePlayer) {
|
||||
if (player == mc.player) {
|
||||
// We caused this event, the server won't send it to us
|
||||
RecordingEventHandler handler = replayModRecording_getRecordingEventHandler();
|
||||
if (handler != null) {
|
||||
|
||||
@@ -155,8 +155,8 @@ public class PacketListener extends ChannelInboundHandlerAdapter {
|
||||
Packet packet = (Packet) msg;
|
||||
|
||||
if(packet instanceof SPacketCollectItem) {
|
||||
if(mc.thePlayer != null ||
|
||||
((SPacketCollectItem) packet).getEntityID() == mc.thePlayer.getEntityId()) {
|
||||
if(mc.player != null ||
|
||||
((SPacketCollectItem) packet).getEntityID() == mc.player.getEntityId()) {
|
||||
super.channelRead(ctx, msg);
|
||||
return;
|
||||
}
|
||||
@@ -228,7 +228,7 @@ public class PacketListener extends ChannelInboundHandlerAdapter {
|
||||
}
|
||||
ByteBuf byteBuf = Unpooled.buffer();
|
||||
PacketBuffer packetBuffer = new PacketBuffer(byteBuf);
|
||||
packetBuffer.writeVarIntToBuffer(packetId);
|
||||
packetBuffer.writeVarInt(packetId);
|
||||
packet.writePacketData(packetBuffer);
|
||||
|
||||
byteBuf.readerIndex(0);
|
||||
|
||||
@@ -190,7 +190,7 @@ public class ResourcePackRecorder {
|
||||
|
||||
Futures.getUnchecked(mc.addScheduledTask(() -> mc.displayGuiScreen(guiScreen)));
|
||||
|
||||
Map<String, String> sessionInfo = ResourcePackRepository.func_190115_a();
|
||||
Map<String, String> sessionInfo = ResourcePackRepository.getDownloadHeaders();
|
||||
repo.downloadingPacks = HttpUtil.downloadResourcePack(file, url, sessionInfo, 50 * 1024 * 1024, guiScreen, mc.getProxy());
|
||||
Futures.addCallback(repo.downloadingPacks, new FutureCallback<Object>() {
|
||||
@Override
|
||||
|
||||
@@ -147,7 +147,7 @@ public class InputReplayTimer extends WrappedTimer {
|
||||
// TODO: Translate magic values to Keyboard.KEY_ constants
|
||||
|
||||
if (key == 32 && Keyboard.isKeyDown(61) && mc.ingameGUI != null) {
|
||||
mc.ingameGUI.getChatGUI().clearChatMessages();
|
||||
mc.ingameGUI.getChatGUI().clearChatMessages(false);
|
||||
}
|
||||
|
||||
if (key == 31 && Keyboard.isKeyDown(61)) {
|
||||
|
||||
@@ -110,12 +110,12 @@ public class ReplayHandler {
|
||||
|
||||
channel.close().awaitUninterruptibly();
|
||||
|
||||
if (mc.thePlayer instanceof CameraEntity) {
|
||||
mc.thePlayer.setDead();
|
||||
if (mc.player instanceof CameraEntity) {
|
||||
mc.player.setDead();
|
||||
}
|
||||
|
||||
if (mc.theWorld != null) {
|
||||
mc.theWorld.sendQuittingDisconnectingPacket();
|
||||
if (mc.world != null) {
|
||||
mc.world.sendQuittingDisconnectingPacket();
|
||||
mc.loadWorld(null);
|
||||
}
|
||||
|
||||
@@ -128,7 +128,7 @@ public class ReplayHandler {
|
||||
}
|
||||
|
||||
private void setup() {
|
||||
mc.ingameGUI.getChatGUI().clearChatMessages();
|
||||
mc.ingameGUI.getChatGUI().clearChatMessages(true);
|
||||
|
||||
NetworkManager networkManager = new NetworkManager(EnumPacketDirection.CLIENTBOUND) {
|
||||
@Override
|
||||
@@ -244,7 +244,7 @@ public class ReplayHandler {
|
||||
* @return {@code true} if the camera is the view entity, {@code false} otherwise
|
||||
*/
|
||||
public boolean isCameraView() {
|
||||
return mc.thePlayer instanceof CameraEntity && mc.thePlayer == mc.getRenderViewEntity();
|
||||
return mc.player instanceof CameraEntity && mc.player == mc.getRenderViewEntity();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -252,7 +252,7 @@ public class ReplayHandler {
|
||||
* @return The camera entity or {@code null} if it does not yet exist
|
||||
*/
|
||||
public CameraEntity getCameraEntity() {
|
||||
return mc.thePlayer instanceof CameraEntity ? (CameraEntity) mc.thePlayer : null;
|
||||
return mc.player instanceof CameraEntity ? (CameraEntity) mc.player : null;
|
||||
}
|
||||
|
||||
public UUID getSpectatedUUID() {
|
||||
@@ -332,7 +332,7 @@ public class ReplayHandler {
|
||||
replaySender.setReplaySpeed(0);
|
||||
|
||||
mc.getConnection().getNetworkManager().processReceivedPackets();
|
||||
for (Entity entity : mc.theWorld.loadedEntityList) {
|
||||
for (Entity entity : mc.world.loadedEntityList) {
|
||||
if (entity instanceof EntityOtherPlayerMP) {
|
||||
EntityOtherPlayerMP e = (EntityOtherPlayerMP) entity;
|
||||
e.setPosition(e.otherPlayerMPX, e.otherPlayerMPY, e.otherPlayerMPZ);
|
||||
|
||||
@@ -257,8 +257,8 @@ public class ReplaySender extends ChannelInboundHandlerAdapter {
|
||||
// Entity#addedToChunk is not set and it is therefore not updated every tick.
|
||||
// To counteract this, we need to manually update it's position if it hasn't been added
|
||||
// to any chunk yet.
|
||||
if (mc.theWorld != null) {
|
||||
for (EntityPlayer playerEntity : mc.theWorld.playerEntities) {
|
||||
if (mc.world != null) {
|
||||
for (EntityPlayer playerEntity : mc.world.playerEntities) {
|
||||
if (!playerEntity.addedToChunk && playerEntity instanceof EntityOtherPlayerMP) {
|
||||
playerEntity.onLivingUpdate();
|
||||
}
|
||||
@@ -292,7 +292,7 @@ public class ReplaySender extends ChannelInboundHandlerAdapter {
|
||||
// If we do not give minecraft time to tick, there will be dead entity artifacts left in the world
|
||||
// Therefore we have to remove all loaded, dead entities manually if we are in sync mode.
|
||||
// We do this after every SpawnX packet and after the destroy entities packet.
|
||||
if (!asyncMode && mc.theWorld != null) {
|
||||
if (!asyncMode && mc.world != null) {
|
||||
if (p instanceof SPacketSpawnPlayer
|
||||
|| p instanceof SPacketSpawnObject
|
||||
|| p instanceof SPacketSpawnMob
|
||||
@@ -300,7 +300,7 @@ public class ReplaySender extends ChannelInboundHandlerAdapter {
|
||||
|| p instanceof SPacketSpawnPainting
|
||||
|| p instanceof SPacketSpawnExperienceOrb
|
||||
|| p instanceof SPacketDestroyEntities) {
|
||||
World world = mc.theWorld;
|
||||
World world = mc.world;
|
||||
for (int i = 0; i < world.loadedEntityList.size(); ++i) {
|
||||
Entity entity = world.loadedEntityList.get(i);
|
||||
if (entity.isDead) {
|
||||
@@ -331,7 +331,7 @@ public class ReplaySender extends ChannelInboundHandlerAdapter {
|
||||
ByteBuf bb = Unpooled.wrappedBuffer(bytes);
|
||||
PacketBuffer pb = new PacketBuffer(bb);
|
||||
|
||||
int i = pb.readVarIntFromBuffer();
|
||||
int i = pb.readVarInt();
|
||||
|
||||
Packet p = EnumConnectionState.PLAY.getPacket(EnumPacketDirection.CLIENTBOUND, i);
|
||||
p.readPacketData(pb);
|
||||
@@ -460,7 +460,7 @@ public class ReplaySender extends ChannelInboundHandlerAdapter {
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
public Void call() {
|
||||
if (mc.theWorld == null || !mc.isCallingFromMinecraftThread()) {
|
||||
if (mc.world == null || !mc.isCallingFromMinecraftThread()) {
|
||||
synchronized(mc.scheduledTasks) {
|
||||
mc.scheduledTasks.add(ListenableFutureTask.create(this));
|
||||
}
|
||||
|
||||
@@ -39,7 +39,7 @@ import java.util.function.Function;
|
||||
|
||||
/**
|
||||
* The camera entity used as the main player entity during replay viewing.
|
||||
* During a replay {@link Minecraft#thePlayer} should be an instance of this class.
|
||||
* During a replay {@link Minecraft#player} should be an instance of this class.
|
||||
* Camera movement is controlled by a separate {@link CameraController}.
|
||||
*/
|
||||
public class CameraEntity extends EntityPlayerSP {
|
||||
@@ -156,9 +156,9 @@ public class CameraEntity extends EntityPlayerSP {
|
||||
// entity is recreated and we have to spectate a new entity
|
||||
UUID spectating = ReplayModReplay.instance.getReplayHandler().getSpectatedUUID();
|
||||
if (spectating != null && (view.getUniqueID() != spectating
|
||||
|| view.worldObj != worldObj)
|
||||
|| worldObj.getEntityByID(view.getEntityId()) != view) {
|
||||
view = worldObj.getPlayerEntityByUUID(spectating);
|
||||
|| view.world != world)
|
||||
|| world.getEntityByID(view.getEntityId()) != view) {
|
||||
view = world.getPlayerEntityByUUID(spectating);
|
||||
if (view != null) {
|
||||
mc.setRenderViewEntity(view);
|
||||
} else {
|
||||
@@ -177,17 +177,17 @@ public class CameraEntity extends EntityPlayerSP {
|
||||
@Override
|
||||
public void preparePlayerToSpawn() {
|
||||
// Make sure our world is up-to-date in case of world changes
|
||||
if (mc.theWorld != null) {
|
||||
worldObj = mc.theWorld;
|
||||
if (mc.world != null) {
|
||||
world = mc.world;
|
||||
}
|
||||
super.preparePlayerToSpawn();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setAngles(float yaw, float pitch) {
|
||||
public void setRotation(float yaw, float pitch) {
|
||||
if (mc.getRenderViewEntity() == this) {
|
||||
// Only update camera rotation when the camera is the view
|
||||
super.setAngles(yaw, pitch);
|
||||
super.setRotation(yaw, pitch);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -448,8 +448,8 @@ public class CameraEntity extends EntityPlayerSP {
|
||||
mc.entityRenderer.itemRenderer.itemStackOffHand = player.getItemStackFromSlot(EntityEquipmentSlot.OFFHAND);
|
||||
|
||||
|
||||
mc.thePlayer.renderArmYaw = mc.thePlayer.prevRenderArmYaw = player.rotationYaw;
|
||||
mc.thePlayer.renderArmPitch = mc.thePlayer.prevRenderArmPitch = player.rotationPitch;
|
||||
mc.player.renderArmYaw = mc.player.prevRenderArmYaw = player.rotationYaw;
|
||||
mc.player.renderArmPitch = mc.player.prevRenderArmPitch = player.rotationPitch;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -58,7 +58,7 @@ public class GuiMarkerTimeline extends AbstractGuiTimeline<GuiMarkerTimeline> im
|
||||
|
||||
protected void drawMarker(GuiRenderer renderer, ReadableDimension size, Marker marker) {
|
||||
int visibleLength = (int) (getLength() * getZoom());
|
||||
int markerPos = MathHelper.clamp_int(marker.getTime(), getOffset(), getOffset() + visibleLength);
|
||||
int markerPos = MathHelper.clamp(marker.getTime(), getOffset(), getOffset() + visibleLength);
|
||||
double positionInVisible = markerPos - getOffset();
|
||||
double fractionOfVisible = positionInVisible / visibleLength;
|
||||
int markerX = (int) (BORDER_LEFT + fractionOfVisible * (size.getWidth() - BORDER_LEFT - BORDER_RIGHT));
|
||||
@@ -99,7 +99,7 @@ public class GuiMarkerTimeline extends AbstractGuiTimeline<GuiMarkerTimeline> im
|
||||
int visibleLength = (int) (getLength() * getZoom());
|
||||
int contentWidth = lastSize.getWidth() - BORDER_LEFT - BORDER_RIGHT;
|
||||
for (Marker marker : replayHandler.getMarkers()) {
|
||||
int markerPos = MathHelper.clamp_int(marker.getTime(), getOffset(), getOffset() + visibleLength);
|
||||
int markerPos = MathHelper.clamp(marker.getTime(), getOffset(), getOffset() + visibleLength);
|
||||
double positionInVisible = markerPos - getOffset();
|
||||
double fractionOfVisible = positionInVisible / visibleLength;
|
||||
int markerX = (int) (BORDER_LEFT + fractionOfVisible * contentWidth);
|
||||
|
||||
@@ -17,7 +17,7 @@ public abstract class MixinGuiSpectator {
|
||||
@Inject(method = "onHotbarSelected", at = @At("HEAD"), cancellable = true)
|
||||
public void isInReplay(int i, CallbackInfo ci) {
|
||||
// Prevent spectator gui from opening while in a replay
|
||||
if (mc.thePlayer instanceof CameraEntity) {
|
||||
if (mc.player instanceof CameraEntity) {
|
||||
ci.cancel();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,8 +33,8 @@ public abstract class MixinPlayerControllerMP {
|
||||
|
||||
@Inject(method = "isSpectator", at=@At("HEAD"), cancellable = true)
|
||||
private void replayModReplay_isSpectator(CallbackInfoReturnable<Boolean> ci) {
|
||||
if (mc.thePlayer instanceof CameraEntity) { // this check should in theory not be required
|
||||
ci.setReturnValue(mc.thePlayer.isSpectator());
|
||||
if (mc.player instanceof CameraEntity) { // this check should in theory not be required
|
||||
ci.setReturnValue(mc.player.isSpectator());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
public abstract class MixinRenderArmorStand {
|
||||
@Inject(method = "canRenderName", at = @At("HEAD"), cancellable = true)
|
||||
private void replayModReplay_canRenderInvisibleName(EntityArmorStand entity, CallbackInfoReturnable<Boolean> ci) {
|
||||
EntityPlayer thePlayer = Minecraft.getMinecraft().thePlayer;
|
||||
EntityPlayer thePlayer = Minecraft.getMinecraft().player;
|
||||
if (thePlayer instanceof CameraEntity && entity.isInvisible()) {
|
||||
ci.setReturnValue(false);
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
public abstract class MixinRenderLivingBase {
|
||||
@Inject(method = "canRenderName", at = @At("HEAD"), cancellable = true)
|
||||
private void replayModReplay_canRenderInvisibleName(EntityLivingBase entity, CallbackInfoReturnable<Boolean> ci) {
|
||||
EntityPlayer thePlayer = Minecraft.getMinecraft().thePlayer;
|
||||
EntityPlayer thePlayer = Minecraft.getMinecraft().player;
|
||||
if (thePlayer instanceof CameraEntity && entity.isInvisible()) {
|
||||
ci.setReturnValue(false);
|
||||
}
|
||||
|
||||
@@ -31,7 +31,7 @@ public abstract class MixinViewFrustum {
|
||||
}
|
||||
|
||||
/**
|
||||
* Instead of calling {@link RenderChunk#setOrigin(int, int, int)} we recreate the render chunk
|
||||
* Instead of calling {@link RenderChunk#setPosition(int, int, int)} we recreate the render chunk
|
||||
* which seems to solve the problem that chunks are invisible when you leave an area and return
|
||||
* to it.
|
||||
* Any better fixes are welcome.
|
||||
@@ -43,8 +43,8 @@ public abstract class MixinViewFrustum {
|
||||
return;
|
||||
}
|
||||
|
||||
int i = MathHelper.floor_double(viewEntityX) - 8;
|
||||
int j = MathHelper.floor_double(viewEntityZ) - 8;
|
||||
int i = MathHelper.floor(viewEntityX) - 8;
|
||||
int j = MathHelper.floor(viewEntityZ) - 8;
|
||||
int k = this.countChunksX * 16;
|
||||
|
||||
for (int l = 0; l < this.countChunksX; ++l) {
|
||||
@@ -59,7 +59,7 @@ public abstract class MixinViewFrustum {
|
||||
// Recreate render chunk instead of setting its position
|
||||
(renderChunks[(j1 * this.countChunksY + l1) * this.countChunksX + l] =
|
||||
renderChunkFactory.create(world, renderGlobal, 0)
|
||||
).setOrigin(blockpos.getX(), blockpos.getY(), blockpos.getZ());
|
||||
).setPosition(blockpos.getX(), blockpos.getY(), blockpos.getZ());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user