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.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.client.renderer.entity.RenderManager; import net.minecraft.client.renderer.entity.RenderPlayer; import net.minecraft.entity.player.EntityPlayer; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import org.lwjgl.input.Keyboard; import java.io.IOException; import java.util.*; public class PlayerOverview implements Extra { @Mod.Instance(ReplayModReplay.MOD_ID) private static ReplayModReplay module; private final Set hiddenPlayers = new HashSet<>(); private boolean savingEnabled; @Override public void register(final ReplayMod mod) throws Exception { mod.getKeyBindingRegistry().registerKeyBinding("replaymod.input.playeroverview", Keyboard.KEY_B, new Runnable() { @Override public void run() { if (module.getReplayHandler() != null) { @SuppressWarnings("unchecked") List players = mod.getMinecraft().theWorld.getPlayers(EntityPlayer.class, new Predicate() { @Override public boolean apply(Object input) { return !(input instanceof CameraEntity); // Exclude the camera entity } }); new PlayerOverviewGui(PlayerOverview.this, players).display(); } } }); MinecraftForge.EVENT_BUS.register(this); RenderManager renderManager = mod.getMinecraft().getRenderManager(); @SuppressWarnings("unchecked") Map skinMap = renderManager.skinMap; skinMap.put("default", new PlayerRenderHook(this, renderManager, false)); skinMap.put("slim", new PlayerRenderHook(this, renderManager, true)); } 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> 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(); } 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(); } } } }