Files
ReplayModCinematic/src/main/java/com/replaymod/extras/playeroverview/PlayerOverview.java
Jonas Herzig 0aed9c3c17 Merge branch 1.8.9 into 1.9.4
f36ebf1 Merge branch 1.8 into 1.8.9
08170b3 Downgrade FG to 2.1 because FG 2.2 is 1.9+ only
41d2547 Update translations
00e999f Fix replay not being closed when opened via URI scheme handler (fixes #92)
767ea29 Fix book gui not being suppressed during replay (fixes #90)
5b04edb Hide ReplayMod app entry from menus on Linux
6aff99d Fix livelock during netty write to embedded channel (fixes #85)
703805f Fix infinite loop in mc.scheduledTasks (fixes #86)
7a4440c Update ReplayStudio
0b9c56c Fix resource packs not working after first time jumping back in time
933ee5f [Compat] Fix camera entity with BetterSprinting prior to 2.0.0 (fixes #78)
83b1090 Fix hotbar being visible while spectating player (fixes #83)
5c73117 [Compat] Fix invisible entities with Orange's 1.7 Animations (fixes #78)
4704b29 Replace the RenderPlayer hook (used subclassing) with a mixin (fixes #79)
0c226b0 Fix path at end of replay resulting in constant reloading (fixes #56)
1b9b13e Rename render success sound to all lowercase (required for 1.11) (fixes #66)
c2000b3 Fix only front-facing chunks visible for ODS rendering (fixes #67)
aafeecc Fix initial login gui not closing on success (fixes #68)
9292add Use percent-encoding for replay file names (fixes #71)
8499c0f Fix name of invis armor stand with CustomNameVisible not rendering (fixes #72)
b9ea572 Try to handle invalid ffmpeg arguments more gracefully (fixes #77)
a2f8c88 Fix compression packets being recorded (fixes #80)
19629c3 Replace usages of System.out with logger
fe1d9b8 Stop Forge from allowing the mod to load on other MC versions (fixes #82)
1a1e96c Fix server with RM installed refusing clients without RM (fixes #76)
35eb9ca Replace usage of FMLLog with the mod logger
2017-08-26 14:16:08 +02:00

115 lines
3.9 KiB
Java

package com.replaymod.extras.playeroverview;
import com.google.common.base.Optional;
import com.google.common.base.Predicate;
import com.replaymod.core.ReplayMod;
import com.replaymod.core.utils.Utils;
import com.replaymod.extras.Extra;
import com.replaymod.replay.ReplayModReplay;
import com.replaymod.replay.camera.CameraEntity;
import com.replaymod.replay.events.ReplayCloseEvent;
import com.replaymod.replay.events.ReplayOpenEvent;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraftforge.client.event.RenderHandEvent;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import org.lwjgl.input.Keyboard;
import java.io.IOException;
import java.util.*;
public class PlayerOverview implements Extra {
private ReplayModReplay module;
private final Set<UUID> hiddenPlayers = new HashSet<>();
private boolean savingEnabled;
@Override
public void register(final ReplayMod mod) throws Exception {
this.module = ReplayModReplay.instance;
mod.getKeyBindingRegistry().registerKeyBinding("replaymod.input.playeroverview", Keyboard.KEY_B, new Runnable() {
@Override
public void run() {
if (module.getReplayHandler() != null) {
@SuppressWarnings("unchecked")
List<EntityPlayer> players = mod.getMinecraft().theWorld.getPlayers(EntityPlayer.class, new Predicate() {
@Override
public boolean apply(Object input) {
return !(input instanceof CameraEntity); // Exclude the camera entity
}
});
if (!Utils.isCtrlDown()) {
// Hide all players that have an UUID v2 (commonly used for NPCs)
Iterator<EntityPlayer> iter = players.iterator();
while (iter.hasNext()) {
UUID uuid = iter.next().getGameProfile().getId();
if (uuid != null && uuid.version() == 2) {
iter.remove();
}
}
}
new PlayerOverviewGui(PlayerOverview.this, players).display();
}
}
});
MinecraftForge.EVENT_BUS.register(this);
}
public boolean isHidden(UUID uuid) {
return hiddenPlayers.contains(uuid);
}
public void setHidden(UUID uuid, boolean hidden) {
if (hidden) {
hiddenPlayers.add(uuid);
} else {
hiddenPlayers.remove(uuid);
}
}
@SubscribeEvent
public void onReplayOpen(ReplayOpenEvent.Pre event) throws IOException {
Optional<Set<UUID>> savedData = event.getReplayHandler().getReplayFile().getInvisiblePlayers();
if (savedData.isPresent()) {
hiddenPlayers.addAll(savedData.get());
savingEnabled = true;
} else {
savingEnabled = false;
}
}
@SubscribeEvent
public void onReplayClose(ReplayCloseEvent.Pre event) throws IOException {
hiddenPlayers.clear();
}
@SubscribeEvent
public void oRenderHand(RenderHandEvent event) {
Entity view = module.getCore().getMinecraft().getRenderViewEntity();
if (view != null && isHidden(view.getUniqueID())) {
event.setCanceled(true);
}
}
public boolean isSavingEnabled() {
return savingEnabled;
}
public void setSavingEnabled(boolean savingEnabled) {
this.savingEnabled = savingEnabled;
}
public void saveHiddenPlayers() {
if (savingEnabled) {
try {
module.getReplayHandler().getReplayFile().writeInvisiblePlayers(hiddenPlayers);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}