Merge branch '1.11.2-dev' into 1.11.2-reprod
This commit is contained in:
@@ -34,9 +34,9 @@ archivesBaseName = "replaymod"
|
|||||||
|
|
||||||
minecraft {
|
minecraft {
|
||||||
coreMod = 'com.replaymod.core.LoadingPlugin'
|
coreMod = 'com.replaymod.core.LoadingPlugin'
|
||||||
version = '1.11-13.19.1.2188'
|
version = '1.11.2-13.20.0.2216'
|
||||||
runDir = "eclipse"
|
runDir = "eclipse"
|
||||||
mappings = "snapshot_20161111"
|
mappings = "snapshot_20161220"
|
||||||
replace '@MOD_VERSION@', project.version
|
replace '@MOD_VERSION@', project.version
|
||||||
// Includes intentional whitespace to stop Forge from declaring the mod to be compatible with
|
// Includes intentional whitespace to stop Forge from declaring the mod to be compatible with
|
||||||
// a newer srg-compatible MC version (that may be using a different protocol version)
|
// a newer srg-compatible MC version (that may be using a different protocol version)
|
||||||
@@ -69,7 +69,7 @@ dependencies {
|
|||||||
|
|
||||||
shade 'org.aspectj:aspectjrt:1.8.2'
|
shade 'org.aspectj:aspectjrt:1.8.2'
|
||||||
|
|
||||||
shade 'com.github.replaymod:ReplayStudio:a5618f7'
|
shade 'com.github.replaymod:ReplayStudio:a4a75b3'
|
||||||
|
|
||||||
testCompile 'junit:junit:4.11'
|
testCompile 'junit:junit:4.11'
|
||||||
}
|
}
|
||||||
|
|||||||
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."));
|
future.setException(new TimeoutException("Camera hasn't stopped spectating."));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (mc.getRenderViewEntity() == mc.thePlayer) {
|
if (mc.getRenderViewEntity() == mc.player) {
|
||||||
future.set(null);
|
future.set(null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,17 +52,17 @@ public class DisableBetterSprinting {
|
|||||||
|
|
||||||
@SubscribeEvent(priority = EventPriority.HIGH)
|
@SubscribeEvent(priority = EventPriority.HIGH)
|
||||||
public void beforeGuiOpenEvent(GuiOpenEvent event) {
|
public void beforeGuiOpenEvent(GuiOpenEvent event) {
|
||||||
if (ReplayModReplay.instance.getReplayHandler() != null && mc.theWorld != null) {
|
if (ReplayModReplay.instance.getReplayHandler() != null && mc.world != null) {
|
||||||
// During replay, get ready to revert BetterSprinting's overwritten playerController
|
// During replay, get ready to revert BetterSprinting's overwritten playerController
|
||||||
originalController = mc.playerController;
|
originalController = mc.playerController;
|
||||||
mc.theWorld.addEventListener(worldAccessHook);
|
mc.world.addEventListener(worldAccessHook);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent(priority = EventPriority.LOW)
|
@SubscribeEvent(priority = EventPriority.LOW)
|
||||||
public void afterGuiOpenEvent(GuiOpenEvent event) {
|
public void afterGuiOpenEvent(GuiOpenEvent event) {
|
||||||
if (ReplayModReplay.instance.getReplayHandler() != null && mc.theWorld != null) {
|
if (ReplayModReplay.instance.getReplayHandler() != null && mc.world != null) {
|
||||||
mc.theWorld.addEventListener(worldAccessHook);
|
mc.world.addEventListener(worldAccessHook);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -93,7 +93,7 @@ public class DisableBetterSprinting {
|
|||||||
@Override public void playSoundToAllNearExcept(@Nullable EntityPlayer player, SoundEvent soundIn, SoundCategory category, double x, double y, double z, float volume, float pitch) {}
|
@Override public void playSoundToAllNearExcept(@Nullable EntityPlayer player, SoundEvent soundIn, SoundCategory category, double x, double y, double z, float volume, float pitch) {}
|
||||||
@Override public void playRecord(SoundEvent soundIn, BlockPos pos) {}
|
@Override public void playRecord(SoundEvent soundIn, BlockPos pos) {}
|
||||||
@Override public void spawnParticle(int p_180442_1_, boolean p_180442_2_, double p_180442_3_, double p_180442_5_, double p_180442_7_, double p_180442_9_, double p_180442_11_, double p_180442_13_, int... p_180442_15_) {}
|
@Override public void spawnParticle(int p_180442_1_, boolean p_180442_2_, double p_180442_3_, double p_180442_5_, double p_180442_7_, double p_180442_9_, double p_180442_11_, double p_180442_13_, int... p_180442_15_) {}
|
||||||
@Override public void func_190570_a(int p_190570_1_, boolean p_190570_2_, boolean p_190570_3_, double p_190570_4_, double p_190570_6_, double p_190570_8_, double p_190570_10_, double p_190570_12_, double p_190570_14_, int... p_190570_16_) {}
|
@Override public void spawnParticle(int p_190570_1_, boolean p_190570_2_, boolean p_190570_3_, double p_190570_4_, double p_190570_6_, double p_190570_8_, double p_190570_10_, double p_190570_12_, double p_190570_14_, int... p_190570_16_) {}
|
||||||
@Override public void onEntityAdded(Entity entityIn) {}
|
@Override public void onEntityAdded(Entity entityIn) {}
|
||||||
@Override public void broadcastSound(int p_180440_1_, BlockPos p_180440_2_, int p_180440_3_) {}
|
@Override public void broadcastSound(int p_180440_1_, BlockPos p_180440_2_, int p_180440_3_) {}
|
||||||
@Override public void playEvent(EntityPlayer player, int type, BlockPos blockPosIn, int data) {}
|
@Override public void playEvent(EntityPlayer player, int type, BlockPos blockPosIn, int data) {}
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ public class HideInvisibleEntities {
|
|||||||
@SubscribeEvent(priority = EventPriority.HIGH)
|
@SubscribeEvent(priority = EventPriority.HIGH)
|
||||||
public void preRenderLiving(RenderLivingEvent.Pre event) {
|
public void preRenderLiving(RenderLivingEvent.Pre event) {
|
||||||
if (modLoaded) {
|
if (modLoaded) {
|
||||||
if (mc.thePlayer instanceof CameraEntity && event.getEntity().isInvisible()) {
|
if (mc.player instanceof CameraEntity && event.getEntity().isInvisible()) {
|
||||||
event.setCanceled(true);
|
event.setCanceled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ public class Restrictions {
|
|||||||
public String handle(SPacketCustomPayload packet) {
|
public String handle(SPacketCustomPayload packet) {
|
||||||
PacketBuffer buffer = packet.getBufferData();
|
PacketBuffer buffer = packet.getBufferData();
|
||||||
while (buffer.isReadable()) {
|
while (buffer.isReadable()) {
|
||||||
String name = buffer.readStringFromBuffer(64);
|
String name = buffer.readString(64);
|
||||||
boolean active = buffer.readBoolean();
|
boolean active = buffer.readBoolean();
|
||||||
// if ("no_xray".equals(name)) {
|
// if ("no_xray".equals(name)) {
|
||||||
// noXray = active;
|
// noXray = active;
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ public class PlayerOverview implements Extra {
|
|||||||
public void run() {
|
public void run() {
|
||||||
if (module.getReplayHandler() != null) {
|
if (module.getReplayHandler() != null) {
|
||||||
@SuppressWarnings("unchecked")
|
@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
|
@Override
|
||||||
public boolean apply(Object input) {
|
public boolean apply(Object input) {
|
||||||
return !(input instanceof CameraEntity); // Exclude the camera entity
|
return !(input instanceof CameraEntity); // Exclude the camera entity
|
||||||
|
|||||||
@@ -5,7 +5,8 @@ public enum MinecraftVersion {
|
|||||||
MC_1_8("Minecraft 1.8", "1.8"),
|
MC_1_8("Minecraft 1.8", "1.8"),
|
||||||
MC_1_9_4("Minecraft 1.9.4", "1.9.4"),
|
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("Minecraft 1.11", "1.11"),
|
||||||
|
MC_1_11_2("Minecraft 1.11.2", "1.11.2");
|
||||||
|
|
||||||
private String niceName, apiName;
|
private String niceName, apiName;
|
||||||
|
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ public class RecordingEventHandler {
|
|||||||
|
|
||||||
public void onPlayerJoin() {
|
public void onPlayerJoin() {
|
||||||
try {
|
try {
|
||||||
packetListener.save(new SPacketSpawnPlayer(mc.thePlayer));
|
packetListener.save(new SPacketSpawnPlayer(mc.player));
|
||||||
} catch(Exception e1) {
|
} catch(Exception e1) {
|
||||||
e1.printStackTrace();
|
e1.printStackTrace();
|
||||||
}
|
}
|
||||||
@@ -65,7 +65,7 @@ public class RecordingEventHandler {
|
|||||||
|
|
||||||
public void onPlayerRespawn() {
|
public void onPlayerRespawn() {
|
||||||
try {
|
try {
|
||||||
packetListener.save(new SPacketSpawnPlayer(mc.thePlayer));
|
packetListener.save(new SPacketSpawnPlayer(mc.player));
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
@@ -93,7 +93,7 @@ public class RecordingEventHandler {
|
|||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public void onPlayerTick(PlayerTickEvent e) {
|
public void onPlayerTick(PlayerTickEvent e) {
|
||||||
try {
|
try {
|
||||||
if(e.player != mc.thePlayer) return;
|
if(e.player != mc.player) return;
|
||||||
|
|
||||||
boolean force = false;
|
boolean force = false;
|
||||||
if(lastX == null || lastY == null || lastZ == null) {
|
if(lastX == null || lastY == null || lastZ == null) {
|
||||||
@@ -168,62 +168,62 @@ public class RecordingEventHandler {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
//Inventory Handling
|
//Inventory Handling
|
||||||
if (playerItems[0] != mc.thePlayer.getHeldItem(EnumHand.MAIN_HAND)) {
|
if (playerItems[0] != mc.player.getHeldItem(EnumHand.MAIN_HAND)) {
|
||||||
playerItems[0] = mc.thePlayer.getHeldItem(EnumHand.MAIN_HAND);
|
playerItems[0] = mc.player.getHeldItem(EnumHand.MAIN_HAND);
|
||||||
packetListener.save(new SPacketEntityEquipment(e.player.getEntityId(), EntityEquipmentSlot.MAINHAND, playerItems[0]));
|
packetListener.save(new SPacketEntityEquipment(e.player.getEntityId(), EntityEquipmentSlot.MAINHAND, playerItems[0]));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (playerItems[1] != mc.thePlayer.getHeldItem(EnumHand.OFF_HAND)) {
|
if (playerItems[1] != mc.player.getHeldItem(EnumHand.OFF_HAND)) {
|
||||||
playerItems[1] = mc.thePlayer.getHeldItem(EnumHand.OFF_HAND);
|
playerItems[1] = mc.player.getHeldItem(EnumHand.OFF_HAND);
|
||||||
packetListener.save(new SPacketEntityEquipment(e.player.getEntityId(), EntityEquipmentSlot.OFFHAND, playerItems[1]));
|
packetListener.save(new SPacketEntityEquipment(e.player.getEntityId(), EntityEquipmentSlot.OFFHAND, playerItems[1]));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (playerItems[2] != mc.thePlayer.getItemStackFromSlot(EntityEquipmentSlot.FEET)) {
|
if (playerItems[2] != mc.player.getItemStackFromSlot(EntityEquipmentSlot.FEET)) {
|
||||||
playerItems[2] = mc.thePlayer.getItemStackFromSlot(EntityEquipmentSlot.FEET);
|
playerItems[2] = mc.player.getItemStackFromSlot(EntityEquipmentSlot.FEET);
|
||||||
packetListener.save(new SPacketEntityEquipment(e.player.getEntityId(), EntityEquipmentSlot.FEET, playerItems[2]));
|
packetListener.save(new SPacketEntityEquipment(e.player.getEntityId(), EntityEquipmentSlot.FEET, playerItems[2]));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (playerItems[3] != mc.thePlayer.getItemStackFromSlot(EntityEquipmentSlot.LEGS)) {
|
if (playerItems[3] != mc.player.getItemStackFromSlot(EntityEquipmentSlot.LEGS)) {
|
||||||
playerItems[3] = mc.thePlayer.getItemStackFromSlot(EntityEquipmentSlot.LEGS);
|
playerItems[3] = mc.player.getItemStackFromSlot(EntityEquipmentSlot.LEGS);
|
||||||
packetListener.save(new SPacketEntityEquipment(e.player.getEntityId(), EntityEquipmentSlot.LEGS, playerItems[3]));
|
packetListener.save(new SPacketEntityEquipment(e.player.getEntityId(), EntityEquipmentSlot.LEGS, playerItems[3]));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (playerItems[4] != mc.thePlayer.getItemStackFromSlot(EntityEquipmentSlot.CHEST)) {
|
if (playerItems[4] != mc.player.getItemStackFromSlot(EntityEquipmentSlot.CHEST)) {
|
||||||
playerItems[4] = mc.thePlayer.getItemStackFromSlot(EntityEquipmentSlot.CHEST);
|
playerItems[4] = mc.player.getItemStackFromSlot(EntityEquipmentSlot.CHEST);
|
||||||
packetListener.save(new SPacketEntityEquipment(e.player.getEntityId(), EntityEquipmentSlot.CHEST, playerItems[4]));
|
packetListener.save(new SPacketEntityEquipment(e.player.getEntityId(), EntityEquipmentSlot.CHEST, playerItems[4]));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (playerItems[5] != mc.thePlayer.getItemStackFromSlot(EntityEquipmentSlot.HEAD)) {
|
if (playerItems[5] != mc.player.getItemStackFromSlot(EntityEquipmentSlot.HEAD)) {
|
||||||
playerItems[5] = mc.thePlayer.getItemStackFromSlot(EntityEquipmentSlot.HEAD);
|
playerItems[5] = mc.player.getItemStackFromSlot(EntityEquipmentSlot.HEAD);
|
||||||
packetListener.save(new SPacketEntityEquipment(e.player.getEntityId(), EntityEquipmentSlot.HEAD, playerItems[5]));
|
packetListener.save(new SPacketEntityEquipment(e.player.getEntityId(), EntityEquipmentSlot.HEAD, playerItems[5]));
|
||||||
}
|
}
|
||||||
|
|
||||||
//Leaving Ride
|
//Leaving Ride
|
||||||
|
|
||||||
if((!mc.thePlayer.isRiding() && lastRiding != -1) ||
|
if((!mc.player.isRiding() && lastRiding != -1) ||
|
||||||
(mc.thePlayer.isRiding() && lastRiding != mc.thePlayer.getRidingEntity().getEntityId())) {
|
(mc.player.isRiding() && lastRiding != mc.player.getRidingEntity().getEntityId())) {
|
||||||
if(!mc.thePlayer.isRiding()) {
|
if(!mc.player.isRiding()) {
|
||||||
lastRiding = -1;
|
lastRiding = -1;
|
||||||
} else {
|
} else {
|
||||||
lastRiding = mc.thePlayer.getRidingEntity().getEntityId();
|
lastRiding = mc.player.getRidingEntity().getEntityId();
|
||||||
}
|
}
|
||||||
packetListener.save(new SPacketEntityAttach(e.player, e.player.getRidingEntity()));
|
packetListener.save(new SPacketEntityAttach(e.player, e.player.getRidingEntity()));
|
||||||
}
|
}
|
||||||
|
|
||||||
//Sleeping
|
//Sleeping
|
||||||
if(!mc.thePlayer.isPlayerSleeping() && wasSleeping) {
|
if(!mc.player.isPlayerSleeping() && wasSleeping) {
|
||||||
packetListener.save(new SPacketAnimation(e.player, 2));
|
packetListener.save(new SPacketAnimation(e.player, 2));
|
||||||
wasSleeping = false;
|
wasSleeping = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Active hand (e.g. eating, drinking, blocking)
|
// Active hand (e.g. eating, drinking, blocking)
|
||||||
if (mc.thePlayer.isHandActive() ^ wasHandActive || mc.thePlayer.getActiveHand() != lastActiveHand) {
|
if (mc.player.isHandActive() ^ wasHandActive || mc.player.getActiveHand() != lastActiveHand) {
|
||||||
wasHandActive = mc.thePlayer.isHandActive();
|
wasHandActive = mc.player.isHandActive();
|
||||||
lastActiveHand = mc.thePlayer.getActiveHand();
|
lastActiveHand = mc.player.getActiveHand();
|
||||||
EntityDataManager dataManager = new EntityDataManager(null);
|
EntityDataManager dataManager = new EntityDataManager(null);
|
||||||
int state = (wasHandActive ? 1 : 0) | (lastActiveHand == EnumHand.OFF_HAND ? 2 : 0);
|
int state = (wasHandActive ? 1 : 0) | (lastActiveHand == EnumHand.OFF_HAND ? 2 : 0);
|
||||||
dataManager.register(EntityLiving.HAND_STATES, (byte) state);
|
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) {
|
} catch(Exception e1) {
|
||||||
@@ -244,7 +244,7 @@ public class RecordingEventHandler {
|
|||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public void onSleep(PlayerSleepInBedEvent event) {
|
public void onSleep(PlayerSleepInBedEvent event) {
|
||||||
try {
|
try {
|
||||||
if (event.getEntityPlayer() != mc.thePlayer) {
|
if (event.getEntityPlayer() != mc.player) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -260,7 +260,7 @@ public class RecordingEventHandler {
|
|||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public void enterMinecart(MinecartInteractEvent event) {
|
public void enterMinecart(MinecartInteractEvent event) {
|
||||||
try {
|
try {
|
||||||
if(event.getEntity() != mc.thePlayer) {
|
if(event.getEntity() != mc.player) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -273,7 +273,7 @@ public class RecordingEventHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void onBlockBreakAnim(int breakerId, BlockPos pos, int progress) {
|
public void onBlockBreakAnim(int breakerId, BlockPos pos, int progress) {
|
||||||
EntityPlayer thePlayer = mc.thePlayer;
|
EntityPlayer thePlayer = mc.player;
|
||||||
if (thePlayer != null && breakerId == thePlayer.getEntityId()) {
|
if (thePlayer != null && breakerId == thePlayer.getEntityId()) {
|
||||||
packetListener.save(new SPacketBlockBreakAnim(breakerId, pos, progress));
|
packetListener.save(new SPacketBlockBreakAnim(breakerId, pos, progress));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,14 +37,14 @@ public abstract class MixinNetHandlerPlayClient {
|
|||||||
*/
|
*/
|
||||||
@Inject(method = "handlePlayerListItem", at=@At("HEAD"))
|
@Inject(method = "handlePlayerListItem", at=@At("HEAD"))
|
||||||
public void recordOwnJoin(SPacketPlayerListItem packet, CallbackInfo ci) {
|
public void recordOwnJoin(SPacketPlayerListItem packet, CallbackInfo ci) {
|
||||||
if (gameController.thePlayer == null) return;
|
if (gameController.player == null) return;
|
||||||
|
|
||||||
RecordingEventHandler handler = getRecordingEventHandler();
|
RecordingEventHandler handler = getRecordingEventHandler();
|
||||||
if (handler != null && packet.getAction() == SPacketPlayerListItem.Action.ADD_PLAYER) {
|
if (handler != null && packet.getAction() == SPacketPlayerListItem.Action.ADD_PLAYER) {
|
||||||
for (SPacketPlayerListItem.AddPlayerData data : packet.getEntries()) {
|
for (SPacketPlayerListItem.AddPlayerData data : packet.getEntries()) {
|
||||||
if (data.getProfile() == null || data.getProfile().getId() == null) continue;
|
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
|
// 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())) {
|
&& !playerInfoMap.containsKey(data.getProfile().getId())) {
|
||||||
handler.onPlayerJoin();
|
handler.onPlayerJoin();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,6 +23,6 @@ public abstract class MixinPlayerControllerMP implements RecordingEventHandler.R
|
|||||||
@Redirect(method = "onPlayerDestroyBlock", at = @At(value = "INVOKE",
|
@Redirect(method = "onPlayerDestroyBlock", at = @At(value = "INVOKE",
|
||||||
target = "Lnet/minecraft/world/World;playEvent(ILnet/minecraft/util/math/BlockPos;I)V"))
|
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) {
|
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"))
|
@Inject(method = "playSound", at = @At("HEAD"))
|
||||||
public void replayModRecording_recordClientSound(EntityPlayer player, double x, double y, double z, SoundEvent sound, SoundCategory category,
|
public void replayModRecording_recordClientSound(EntityPlayer player, double x, double y, double z, SoundEvent sound, SoundCategory category,
|
||||||
float volume, float pitch, CallbackInfo ci) {
|
float volume, float pitch, CallbackInfo ci) {
|
||||||
if (player == mc.thePlayer) {
|
if (player == mc.player) {
|
||||||
RecordingEventHandler handler = replayModRecording_getRecordingEventHandler();
|
RecordingEventHandler handler = replayModRecording_getRecordingEventHandler();
|
||||||
if (handler != null) {
|
if (handler != null) {
|
||||||
handler.onClientSound(sound, category, x, y, z, volume, pitch);
|
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.
|
// These are handled in the World class, so we override the method in WorldClient and add our special handling.
|
||||||
@Override
|
@Override
|
||||||
public void playEvent(EntityPlayer player, int type, BlockPos pos, int data) {
|
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
|
// We caused this event, the server won't send it to us
|
||||||
RecordingEventHandler handler = replayModRecording_getRecordingEventHandler();
|
RecordingEventHandler handler = replayModRecording_getRecordingEventHandler();
|
||||||
if (handler != null) {
|
if (handler != null) {
|
||||||
|
|||||||
@@ -160,8 +160,8 @@ public class PacketListener extends ChannelInboundHandlerAdapter {
|
|||||||
Packet packet = (Packet) msg;
|
Packet packet = (Packet) msg;
|
||||||
|
|
||||||
if(packet instanceof SPacketCollectItem) {
|
if(packet instanceof SPacketCollectItem) {
|
||||||
if(mc.thePlayer != null ||
|
if(mc.player != null ||
|
||||||
((SPacketCollectItem) packet).getEntityID() == mc.thePlayer.getEntityId()) {
|
((SPacketCollectItem) packet).getEntityID() == mc.player.getEntityId()) {
|
||||||
super.channelRead(ctx, msg);
|
super.channelRead(ctx, msg);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -233,7 +233,7 @@ public class PacketListener extends ChannelInboundHandlerAdapter {
|
|||||||
}
|
}
|
||||||
ByteBuf byteBuf = Unpooled.buffer();
|
ByteBuf byteBuf = Unpooled.buffer();
|
||||||
PacketBuffer packetBuffer = new PacketBuffer(byteBuf);
|
PacketBuffer packetBuffer = new PacketBuffer(byteBuf);
|
||||||
packetBuffer.writeVarIntToBuffer(packetId);
|
packetBuffer.writeVarInt(packetId);
|
||||||
packet.writePacketData(packetBuffer);
|
packet.writePacketData(packetBuffer);
|
||||||
|
|
||||||
byteBuf.readerIndex(0);
|
byteBuf.readerIndex(0);
|
||||||
|
|||||||
@@ -110,12 +110,12 @@ public class ReplayHandler {
|
|||||||
|
|
||||||
channel.close().awaitUninterruptibly();
|
channel.close().awaitUninterruptibly();
|
||||||
|
|
||||||
if (mc.thePlayer instanceof CameraEntity) {
|
if (mc.player instanceof CameraEntity) {
|
||||||
mc.thePlayer.setDead();
|
mc.player.setDead();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mc.theWorld != null) {
|
if (mc.world != null) {
|
||||||
mc.theWorld.sendQuittingDisconnectingPacket();
|
mc.world.sendQuittingDisconnectingPacket();
|
||||||
mc.loadWorld(null);
|
mc.loadWorld(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -246,7 +246,7 @@ public class ReplayHandler {
|
|||||||
* @return {@code true} if the camera is the view entity, {@code false} otherwise
|
* @return {@code true} if the camera is the view entity, {@code false} otherwise
|
||||||
*/
|
*/
|
||||||
public boolean isCameraView() {
|
public boolean isCameraView() {
|
||||||
return mc.thePlayer instanceof CameraEntity && mc.thePlayer == mc.getRenderViewEntity();
|
return mc.player instanceof CameraEntity && mc.player == mc.getRenderViewEntity();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -254,7 +254,7 @@ public class ReplayHandler {
|
|||||||
* @return The camera entity or {@code null} if it does not yet exist
|
* @return The camera entity or {@code null} if it does not yet exist
|
||||||
*/
|
*/
|
||||||
public CameraEntity getCameraEntity() {
|
public CameraEntity getCameraEntity() {
|
||||||
return mc.thePlayer instanceof CameraEntity ? (CameraEntity) mc.thePlayer : null;
|
return mc.player instanceof CameraEntity ? (CameraEntity) mc.player : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public UUID getSpectatedUUID() {
|
public UUID getSpectatedUUID() {
|
||||||
@@ -334,7 +334,7 @@ public class ReplayHandler {
|
|||||||
replaySender.setReplaySpeed(0);
|
replaySender.setReplaySpeed(0);
|
||||||
|
|
||||||
mc.getConnection().getNetworkManager().processReceivedPackets();
|
mc.getConnection().getNetworkManager().processReceivedPackets();
|
||||||
for (Entity entity : mc.theWorld.loadedEntityList) {
|
for (Entity entity : mc.world.loadedEntityList) {
|
||||||
if (entity instanceof EntityOtherPlayerMP) {
|
if (entity instanceof EntityOtherPlayerMP) {
|
||||||
EntityOtherPlayerMP e = (EntityOtherPlayerMP) entity;
|
EntityOtherPlayerMP e = (EntityOtherPlayerMP) entity;
|
||||||
e.setPosition(e.otherPlayerMPX, e.otherPlayerMPY, e.otherPlayerMPZ);
|
e.setPosition(e.otherPlayerMPX, e.otherPlayerMPY, e.otherPlayerMPZ);
|
||||||
|
|||||||
@@ -263,8 +263,8 @@ public class ReplaySender extends ChannelDuplexHandler {
|
|||||||
// Entity#addedToChunk is not set and it is therefore not updated every tick.
|
// 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 counteract this, we need to manually update it's position if it hasn't been added
|
||||||
// to any chunk yet.
|
// to any chunk yet.
|
||||||
if (mc.theWorld != null) {
|
if (mc.world != null) {
|
||||||
for (EntityPlayer playerEntity : mc.theWorld.playerEntities) {
|
for (EntityPlayer playerEntity : mc.world.playerEntities) {
|
||||||
if (!playerEntity.addedToChunk && playerEntity instanceof EntityOtherPlayerMP) {
|
if (!playerEntity.addedToChunk && playerEntity instanceof EntityOtherPlayerMP) {
|
||||||
playerEntity.onLivingUpdate();
|
playerEntity.onLivingUpdate();
|
||||||
}
|
}
|
||||||
@@ -298,7 +298,7 @@ public class ReplaySender extends ChannelDuplexHandler {
|
|||||||
// If we do not give minecraft time to tick, there will be dead entity artifacts left in the world
|
// 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.
|
// 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.
|
// 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
|
if (p instanceof SPacketSpawnPlayer
|
||||||
|| p instanceof SPacketSpawnObject
|
|| p instanceof SPacketSpawnObject
|
||||||
|| p instanceof SPacketSpawnMob
|
|| p instanceof SPacketSpawnMob
|
||||||
@@ -306,7 +306,7 @@ public class ReplaySender extends ChannelDuplexHandler {
|
|||||||
|| p instanceof SPacketSpawnPainting
|
|| p instanceof SPacketSpawnPainting
|
||||||
|| p instanceof SPacketSpawnExperienceOrb
|
|| p instanceof SPacketSpawnExperienceOrb
|
||||||
|| p instanceof SPacketDestroyEntities) {
|
|| p instanceof SPacketDestroyEntities) {
|
||||||
World world = mc.theWorld;
|
World world = mc.world;
|
||||||
for (int i = 0; i < world.loadedEntityList.size(); ++i) {
|
for (int i = 0; i < world.loadedEntityList.size(); ++i) {
|
||||||
Entity entity = world.loadedEntityList.get(i);
|
Entity entity = world.loadedEntityList.get(i);
|
||||||
if (entity.isDead) {
|
if (entity.isDead) {
|
||||||
@@ -337,7 +337,7 @@ public class ReplaySender extends ChannelDuplexHandler {
|
|||||||
ByteBuf bb = Unpooled.wrappedBuffer(bytes);
|
ByteBuf bb = Unpooled.wrappedBuffer(bytes);
|
||||||
PacketBuffer pb = new PacketBuffer(bb);
|
PacketBuffer pb = new PacketBuffer(bb);
|
||||||
|
|
||||||
int i = pb.readVarIntFromBuffer();
|
int i = pb.readVarInt();
|
||||||
|
|
||||||
Packet p = EnumConnectionState.PLAY.getPacket(EnumPacketDirection.CLIENTBOUND, i);
|
Packet p = EnumConnectionState.PLAY.getPacket(EnumPacketDirection.CLIENTBOUND, i);
|
||||||
p.readPacketData(pb);
|
p.readPacketData(pb);
|
||||||
@@ -473,7 +473,7 @@ public class ReplaySender extends ChannelDuplexHandler {
|
|||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public void run() {
|
public void run() {
|
||||||
if (mc.theWorld == null || !mc.isCallingFromMinecraftThread()) {
|
if (mc.world == null || !mc.isCallingFromMinecraftThread()) {
|
||||||
ReplayMod.instance.runLater(this);
|
ReplayMod.instance.runLater(this);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -829,7 +829,7 @@ public class ReplaySender extends ChannelDuplexHandler {
|
|||||||
// unloaded even though they shouldn't.
|
// unloaded even though they shouldn't.
|
||||||
// To make things worse, it seems like players were never supposed to be unloaded this way because
|
// To make things worse, it seems like players were never supposed to be unloaded this way because
|
||||||
// they will remain glitched in the World#playerEntities list.
|
// they will remain glitched in the World#playerEntities list.
|
||||||
World world = mc.theWorld;
|
World world = mc.world;
|
||||||
IChunkProvider chunkProvider = world.getChunkProvider();
|
IChunkProvider chunkProvider = world.getChunkProvider();
|
||||||
// Get the chunk that will be unloaded
|
// Get the chunk that will be unloaded
|
||||||
Chunk chunk = chunkProvider.provideChunk(packet.getX(), packet.getZ());
|
Chunk chunk = chunkProvider.provideChunk(packet.getX(), packet.getZ());
|
||||||
@@ -849,8 +849,8 @@ public class ReplaySender extends ChannelDuplexHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Check whether the entity has left the chunk
|
// Check whether the entity has left the chunk
|
||||||
int chunkX = MathHelper.floor_double(entity.posX / 16);
|
int chunkX = MathHelper.floor(entity.posX / 16);
|
||||||
int chunkZ = MathHelper.floor_double(entity.posZ / 16);
|
int chunkZ = MathHelper.floor(entity.posZ / 16);
|
||||||
if (entity.chunkCoordX != chunkX || entity.chunkCoordZ != chunkZ) {
|
if (entity.chunkCoordX != chunkX || entity.chunkCoordZ != chunkZ) {
|
||||||
// Entity has left the chunk
|
// Entity has left the chunk
|
||||||
chunk.removeEntityAtIndex(entity, entity.chunkCoordY);
|
chunk.removeEntityAtIndex(entity, entity.chunkCoordY);
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ import java.util.function.Function;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* The camera entity used as the main player entity during replay viewing.
|
* 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}.
|
* Camera movement is controlled by a separate {@link CameraController}.
|
||||||
*/
|
*/
|
||||||
public class CameraEntity extends EntityPlayerSP {
|
public class CameraEntity extends EntityPlayerSP {
|
||||||
@@ -158,14 +158,14 @@ public class CameraEntity extends EntityPlayerSP {
|
|||||||
// entity is recreated and we have to spectate a new entity
|
// entity is recreated and we have to spectate a new entity
|
||||||
UUID spectating = ReplayModReplay.instance.getReplayHandler().getSpectatedUUID();
|
UUID spectating = ReplayModReplay.instance.getReplayHandler().getSpectatedUUID();
|
||||||
if (spectating != null && (view.getUniqueID() != spectating
|
if (spectating != null && (view.getUniqueID() != spectating
|
||||||
|| view.worldObj != worldObj)
|
|| view.world != world)
|
||||||
|| worldObj.getEntityByID(view.getEntityId()) != view) {
|
|| world.getEntityByID(view.getEntityId()) != view) {
|
||||||
if (spectating == null) {
|
if (spectating == null) {
|
||||||
// Entity (non-player) died, stop spectating
|
// Entity (non-player) died, stop spectating
|
||||||
ReplayModReplay.instance.getReplayHandler().spectateEntity(this);
|
ReplayModReplay.instance.getReplayHandler().spectateEntity(this);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
view = worldObj.getPlayerEntityByUUID(spectating);
|
view = world.getPlayerEntityByUUID(spectating);
|
||||||
if (view != null) {
|
if (view != null) {
|
||||||
mc.setRenderViewEntity(view);
|
mc.setRenderViewEntity(view);
|
||||||
} else {
|
} else {
|
||||||
@@ -184,17 +184,17 @@ public class CameraEntity extends EntityPlayerSP {
|
|||||||
@Override
|
@Override
|
||||||
public void preparePlayerToSpawn() {
|
public void preparePlayerToSpawn() {
|
||||||
// Make sure our world is up-to-date in case of world changes
|
// Make sure our world is up-to-date in case of world changes
|
||||||
if (mc.theWorld != null) {
|
if (mc.world != null) {
|
||||||
worldObj = mc.theWorld;
|
world = mc.world;
|
||||||
}
|
}
|
||||||
super.preparePlayerToSpawn();
|
super.preparePlayerToSpawn();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setAngles(float yaw, float pitch) {
|
public void setRotation(float yaw, float pitch) {
|
||||||
if (mc.getRenderViewEntity() == this) {
|
if (mc.getRenderViewEntity() == this) {
|
||||||
// Only update camera rotation when the camera is the view
|
// Only update camera rotation when the camera is the view
|
||||||
super.setAngles(yaw, pitch);
|
super.setRotation(yaw, pitch);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -392,9 +392,9 @@ public class CameraEntity extends EntityPlayerSP {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addChatMessage(ITextComponent message) {
|
public void sendMessage(ITextComponent message) {
|
||||||
if (MinecraftForge.EVENT_BUS.post(new ReplayChatMessageEvent(this))) return;
|
if (MinecraftForge.EVENT_BUS.post(new ReplayChatMessageEvent(this))) return;
|
||||||
super.addChatMessage(message);
|
super.sendMessage(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
private class EventHandler {
|
private class EventHandler {
|
||||||
@@ -461,8 +461,8 @@ public class CameraEntity extends EntityPlayerSP {
|
|||||||
mc.entityRenderer.itemRenderer.itemStackOffHand = player.getItemStackFromSlot(EntityEquipmentSlot.OFFHAND);
|
mc.entityRenderer.itemRenderer.itemStackOffHand = player.getItemStackFromSlot(EntityEquipmentSlot.OFFHAND);
|
||||||
|
|
||||||
|
|
||||||
mc.thePlayer.renderArmYaw = mc.thePlayer.prevRenderArmYaw = player.rotationYaw;
|
mc.player.renderArmYaw = mc.player.prevRenderArmYaw = player.rotationYaw;
|
||||||
mc.thePlayer.renderArmPitch = mc.thePlayer.prevRenderArmPitch = player.rotationPitch;
|
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) {
|
protected void drawMarker(GuiRenderer renderer, ReadableDimension size, Marker marker) {
|
||||||
int visibleLength = (int) (getLength() * getZoom());
|
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 positionInVisible = markerPos - getOffset();
|
||||||
double fractionOfVisible = positionInVisible / visibleLength;
|
double fractionOfVisible = positionInVisible / visibleLength;
|
||||||
int markerX = (int) (BORDER_LEFT + fractionOfVisible * (size.getWidth() - BORDER_LEFT - BORDER_RIGHT));
|
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 visibleLength = (int) (getLength() * getZoom());
|
||||||
int contentWidth = lastSize.getWidth() - BORDER_LEFT - BORDER_RIGHT;
|
int contentWidth = lastSize.getWidth() - BORDER_LEFT - BORDER_RIGHT;
|
||||||
for (Marker marker : replayHandler.getMarkers()) {
|
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 positionInVisible = markerPos - getOffset();
|
||||||
double fractionOfVisible = positionInVisible / visibleLength;
|
double fractionOfVisible = positionInVisible / visibleLength;
|
||||||
int markerX = (int) (BORDER_LEFT + fractionOfVisible * contentWidth);
|
int markerX = (int) (BORDER_LEFT + fractionOfVisible * contentWidth);
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ public abstract class MixinGuiSpectator {
|
|||||||
@Inject(method = "onHotbarSelected", at = @At("HEAD"), cancellable = true)
|
@Inject(method = "onHotbarSelected", at = @At("HEAD"), cancellable = true)
|
||||||
public void isInReplay(int i, CallbackInfo ci) {
|
public void isInReplay(int i, CallbackInfo ci) {
|
||||||
// Prevent spectator gui from opening while in a replay
|
// Prevent spectator gui from opening while in a replay
|
||||||
if (mc.thePlayer instanceof CameraEntity) {
|
if (mc.player instanceof CameraEntity) {
|
||||||
ci.cancel();
|
ci.cancel();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,8 +33,8 @@ public abstract class MixinPlayerControllerMP {
|
|||||||
|
|
||||||
@Inject(method = "isSpectator", at=@At("HEAD"), cancellable = true)
|
@Inject(method = "isSpectator", at=@At("HEAD"), cancellable = true)
|
||||||
private void replayModReplay_isSpectator(CallbackInfoReturnable<Boolean> ci) {
|
private void replayModReplay_isSpectator(CallbackInfoReturnable<Boolean> ci) {
|
||||||
if (mc.thePlayer instanceof CameraEntity) { // this check should in theory not be required
|
if (mc.player instanceof CameraEntity) { // this check should in theory not be required
|
||||||
ci.setReturnValue(mc.thePlayer.isSpectator());
|
ci.setReturnValue(mc.player.isSpectator());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
|||||||
public abstract class MixinRenderLivingBase {
|
public abstract class MixinRenderLivingBase {
|
||||||
@Inject(method = "canRenderName", at = @At("HEAD"), cancellable = true)
|
@Inject(method = "canRenderName", at = @At("HEAD"), cancellable = true)
|
||||||
private void replayModReplay_canRenderInvisibleName(EntityLivingBase entity, CallbackInfoReturnable<Boolean> ci) {
|
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()) {
|
if (thePlayer instanceof CameraEntity && entity.isInvisible()) {
|
||||||
ci.setReturnValue(false);
|
ci.setReturnValue(false);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,8 +43,8 @@ public abstract class MixinViewFrustum {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int i = MathHelper.floor_double(viewEntityX) - 8;
|
int i = MathHelper.floor(viewEntityX) - 8;
|
||||||
int j = MathHelper.floor_double(viewEntityZ) - 8;
|
int j = MathHelper.floor(viewEntityZ) - 8;
|
||||||
int k = this.countChunksX * 16;
|
int k = this.countChunksX * 16;
|
||||||
|
|
||||||
for (int l = 0; l < this.countChunksX; ++l) {
|
for (int l = 0; l < this.countChunksX; ++l) {
|
||||||
|
|||||||
Reference in New Issue
Block a user