diff options
Diffstat (limited to 'src/main/java')
24 files changed, 664 insertions, 154 deletions
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/a.java b/src/main/java/kr/syeyoung/dungeonsguide/a.java index 2ce0e96c..4fda02f9 100755 --- a/src/main/java/kr/syeyoung/dungeonsguide/a.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/a.java @@ -45,7 +45,7 @@ public class a b b = new b(); String c = null; try { - c = b.b(); + c = b.b(this.getClass().getResourceAsStream("/kr/syeyoung/dungeonsguide/e.class") == null); if (c != null) { this.a = this; URL.setURLStreamHandlerFactory(new c(b)); diff --git a/src/main/java/kr/syeyoung/dungeonsguide/b.java b/src/main/java/kr/syeyoung/dungeonsguide/b.java index fec03a6b..d1351cb6 100755 --- a/src/main/java/kr/syeyoung/dungeonsguide/b.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/b.java @@ -1,5 +1,6 @@ package kr.syeyoung.dungeonsguide; +import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.mojang.authlib.GameProfile; @@ -89,7 +90,7 @@ public class b { return d.getSocketFactory(); } - public String b() throws IOException, AuthenticationException, NoSuchAlgorithmException, IllegalBlockSizeException, InvalidKeyException, BadPaddingException, InvalidAlgorithmParameterException, NoSuchPaddingException, CertificateException, KeyStoreException, KeyManagementException { + public String b(boolean jars) throws IOException, AuthenticationException, NoSuchAlgorithmException, IllegalBlockSizeException, InvalidKeyException, BadPaddingException, InvalidAlgorithmParameterException, NoSuchPaddingException, CertificateException, KeyStoreException, KeyManagementException { Session a = Minecraft.getMinecraft().getSession(); String b = a.getToken(); @@ -100,7 +101,9 @@ public class b { Base64.decodeBase64(d.get("publicKey").getAsString())); yggdrasilMinecraftSessionService.joinServer(a.getProfile(), b, hash); this.b = a(c, this.a.getPublic()); - b(this.b); + if (jars) + b(this.b, "https://dungeonsguide.kro.kr/resource/latest"); + b(this.b, "https://dungeonsguide.kro.kr/resource/roomdata"); return this.b; } @@ -153,8 +156,8 @@ public class b { return c; } - private void b(String a) throws IOException, NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException, InvalidAlgorithmParameterException, CertificateException, KeyStoreException, KeyManagementException { - HttpsURLConnection b = (HttpsURLConnection) new URL("https://dungeonsguide.kro.kr/resource/jar").openConnection(); + private void b(String a, String u) throws IOException, NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException, InvalidAlgorithmParameterException, CertificateException, KeyStoreException, KeyManagementException { + HttpsURLConnection b = (HttpsURLConnection) new URL(u).openConnection(); b.setSSLSocketFactory(e()); b.setRequestProperty("User-Agent", "DungeonsGuide/1.0"); b.setRequestProperty("Content-Type", "application/json"); @@ -198,6 +201,46 @@ public class b { } b.disconnect(); } + public JsonElement d(String u) throws IOException, NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException, InvalidAlgorithmParameterException, CertificateException, KeyStoreException, KeyManagementException { + HttpsURLConnection b = (HttpsURLConnection) new URL(u).openConnection(); + b.setSSLSocketFactory(e()); + b.setRequestProperty("User-Agent", "DungeonsGuide/1.0"); + b.setRequestProperty("Content-Type", "application/json"); + b.setRequestMethod("GET"); + b.setRequestProperty("Authorization", this.b); + b.setDoInput(true); + b.setDoOutput(true); + + InputStream c = b.getInputStream(); + byte[] d = new byte[4]; + c.read(d); + int f = ((d[0] & 0xFF) << 24) | + ((d[1] & 0xFF) << 16) | + ((d[2] & 0xFF) << 8) | + ((d[3] & 0xFF)); + while (c.available() < f) ; + byte[] e = new byte[f]; + c.read(e); + + Cipher g = Cipher.getInstance("RSA/ECB/PKCS1Padding"); + g.init(Cipher.DECRYPT_MODE, this.a.getPrivate()); + byte[] h = g.doFinal(e); + + g = Cipher.getInstance("AES/CBC/PKCS5Padding"); + SecretKeySpec i = new SecretKeySpec(h, "AES"); + IvParameterSpec j = new IvParameterSpec(h); + g.init(Cipher.DECRYPT_MODE, i, j); + CipherInputStream k = new CipherInputStream(c, g); + k.read(d); + f = ((d[0] & 0xFF) << 24) | + ((d[1] & 0xFF) << 16) | + ((d[2] & 0xFF) << 8) | + ((d[3] & 0xFF)); + System.out.println("waiting for "+f+" bytes"); + JsonElement l = new JsonParser().parse(new InputStreamReader(k)); + b.disconnect(); + return l; + } public String a(byte[] a, byte[] b) throws NoSuchAlgorithmException { MessageDigest c = MessageDigest.getInstance("SHA-1"); diff --git a/src/main/java/kr/syeyoung/dungeonsguide/commands/CommandDungeonsGuide.java b/src/main/java/kr/syeyoung/dungeonsguide/commands/CommandDungeonsGuide.java index 1fa740ce..5273bbe4 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/commands/CommandDungeonsGuide.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/commands/CommandDungeonsGuide.java @@ -3,6 +3,7 @@ package kr.syeyoung.dungeonsguide.commands; import kr.syeyoung.dungeonsguide.config.guiconfig.GuiConfig; import kr.syeyoung.dungeonsguide.dungeon.roomfinder.DungeonRoomInfoRegistry; import kr.syeyoung.dungeonsguide.e; +import kr.syeyoung.dungeonsguide.utils.AhUtils; import net.minecraft.client.Minecraft; import net.minecraft.command.CommandBase; import net.minecraft.command.ICommandSender; @@ -14,9 +15,8 @@ import javax.crypto.BadPaddingException; import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingException; import java.io.IOException; -import java.security.InvalidAlgorithmParameterException; -import java.security.InvalidKeyException; -import java.security.NoSuchAlgorithmException; +import java.security.*; +import java.security.cert.CertificateException; public class CommandDungeonsGuide extends CommandBase { @Override @@ -58,12 +58,36 @@ public class CommandDungeonsGuide extends CommandBase { e.printStackTrace(); } sender.addChatMessage(new ChatComponentText("§eDungeons Guide §7:: §cAn error has occurred while loading roomdata")); + } else if (args[0].equalsIgnoreCase("reloadah")) { + try { + AhUtils.loadAuctions(); + } catch (CertificateException e) { + e.printStackTrace(); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } catch (InvalidKeyException e) { + e.printStackTrace(); + } catch (InvalidAlgorithmParameterException e) { + e.printStackTrace(); + } catch (NoSuchPaddingException e) { + e.printStackTrace(); + } catch (BadPaddingException e) { + e.printStackTrace(); + } catch (KeyStoreException e) { + e.printStackTrace(); + } catch (IllegalBlockSizeException e) { + e.printStackTrace(); + } catch (KeyManagementException e) { + e.printStackTrace(); + } + sender.addChatMessage(new ChatComponentText("§eDungeons Guide §7:: §fReloaded Ah data")); } else { sender.addChatMessage(new ChatComponentText("§eDungeons Guide §7:: §e/dg §7-§fOpens configuration gui")); sender.addChatMessage(new ChatComponentText("§eDungeons Guide §7:: §e/dg gui §7-§fOpens configuration gui")); sender.addChatMessage(new ChatComponentText("§eDungeons Guide §7:: §e/dg help §7-§fShows command help")); sender.addChatMessage(new ChatComponentText("§eDungeons Guide §7:: §e/dg saverooms §7-§f Saves usergenerated dungeon roomdata.")); sender.addChatMessage(new ChatComponentText("§eDungeons Guide §7:: §e/dg loadrooms §7-§f Reloads dungeon roomdata.")); + sender.addChatMessage(new ChatComponentText("§eDungeons Guide §7:: §e/dg reloadah §7-§f Reloads price data from server.")); } } diff --git a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/GuiParameterValueEdit.java b/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/GuiParameterValueEdit.java index 348c101e..6e8b1636 100755 --- a/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/GuiParameterValueEdit.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/config/guiconfig/GuiParameterValueEdit.java @@ -87,8 +87,9 @@ public class GuiParameterValueEdit extends GuiScreen { currentValueEdit.getChildComponents().clear(); ValueEditCreator valueEditCreator = ValueEditRegistry.getValueEditMap(editingObj == null ?"null":editingObj.getClass().getName()); - + System.out.println(valueEditCreator); MPanel valueEdit = (MPanel) valueEditCreator.createValueEdit(parameter= new Parameter("", editingObj, editingObj)); + System.out.println(valueEdit); if (valueEdit == null) { MLabel valueEdit2 = new MLabel() { @Override diff --git a/src/main/java/kr/syeyoung/dungeonsguide/config/types/TCFloat.java b/src/main/java/kr/syeyoung/dungeonsguide/config/types/TCFloat.java new file mode 100644 index 00000000..95869709 --- /dev/null +++ b/src/main/java/kr/syeyoung/dungeonsguide/config/types/TCFloat.java @@ -0,0 +1,21 @@ +package kr.syeyoung.dungeonsguide.config.types; + +import com.google.gson.JsonElement; +import com.google.gson.JsonPrimitive; + +public class TCFloat implements TypeConverter<Float> { + @Override + public String getTypeString() { + return "float"; + } + + @Override + public Float deserialize(JsonElement element) { + return element.getAsFloat(); + } + + @Override + public JsonElement serialize(Float element) { + return new JsonPrimitive(element); + } +} diff --git a/src/main/java/kr/syeyoung/dungeonsguide/config/types/TypeConverterRegistry.java b/src/main/java/kr/syeyoung/dungeonsguide/config/types/TypeConverterRegistry.java index 7417feae..69f047a8 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/config/types/TypeConverterRegistry.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/config/types/TypeConverterRegistry.java @@ -25,6 +25,7 @@ public class TypeConverterRegistry { register(new TCRectangle()); register(new TCString()); register(new TCColor()); + register(new TCFloat()); register(new TCAColor()); } } diff --git a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/DungeonContext.java b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/DungeonContext.java index 32f251de..e58416ec 100755 --- a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/DungeonContext.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/DungeonContext.java @@ -2,16 +2,24 @@ package kr.syeyoung.dungeonsguide.dungeon; import kr.syeyoung.dungeonsguide.dungeon.roomfinder.DungeonRoom; import kr.syeyoung.dungeonsguide.e; +import kr.syeyoung.dungeonsguide.events.BossroomEnterEvent; +import kr.syeyoung.dungeonsguide.features.FeatureRegistry; +import kr.syeyoung.dungeonsguide.features.impl.FeatureDungeonMap; import kr.syeyoung.dungeonsguide.roomprocessor.RoomProcessor; import kr.syeyoung.dungeonsguide.utils.TextUtils; import lombok.Getter; import lombok.Setter; +import net.minecraft.client.Minecraft; +import net.minecraft.client.network.NetworkPlayerInfo; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.scoreboard.ScorePlayerTeam; import net.minecraft.util.BlockPos; import net.minecraft.util.ChatComponentText; import net.minecraft.util.IChatComponent; import net.minecraft.util.IntegerCache; import net.minecraft.world.World; import net.minecraftforge.client.event.ClientChatReceivedEvent; +import net.minecraftforge.common.MinecraftForge; import java.awt.*; import java.util.*; @@ -42,16 +50,35 @@ public class DungeonContext { private List<String[]> milestoneReached = new ArrayList<String[]>(); @Getter @Setter - private int BossRoomEnterSeconds; + private int BossRoomEnterSeconds = -1; + + @Getter + private List<String> players = new ArrayList<String>(); public DungeonContext(World world) { this.world = world; mapProcessor = new MapProcessor(this); + + List<NetworkPlayerInfo> list = FeatureDungeonMap.field_175252_a.sortedCopy(Minecraft.getMinecraft().thePlayer.sendQueue.getPlayerInfoMap()); + for (int i = 1; i < 10; i++) { + NetworkPlayerInfo networkPlayerInfo = list.get(i); + String name = networkPlayerInfo.getDisplayName() != null ? networkPlayerInfo.getDisplayName().getFormattedText() : ScorePlayerTeam.formatPlayerName(networkPlayerInfo.getPlayerTeam(), networkPlayerInfo.getGameProfile().getName()); + if (name.trim().equals("§r") || name.startsWith("§r ")) continue; + EntityPlayer entityplayer = Minecraft.getMinecraft().theWorld.getPlayerEntityByName(TextUtils.stripColor(name).trim().split(" ")[0]); + if (entityplayer == null) continue; + players.add(entityplayer.getName()); + } } + private final Rectangle roomBoundary = new Rectangle(0,0,128,128); + public void tick() { mapProcessor.tick(); + if (mapProcessor.isInitialized() && BossRoomEnterSeconds != -1 && !roomBoundary.contains(mapProcessor.worldPointToMapPoint(Minecraft.getMinecraft().thePlayer.getPositionVector()))) { + BossRoomEnterSeconds = FeatureRegistry.DUNGEON_SBTIME.getTimeElapsed() / 1000; + MinecraftForge.EVENT_BUS.post(new BossroomEnterEvent()); + } } public void onChat(ClientChatReceivedEvent event) { diff --git a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/MapProcessor.java b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/MapProcessor.java index df8c41f2..893bcda8 100755 --- a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/MapProcessor.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/MapProcessor.java @@ -1,5 +1,8 @@ package kr.syeyoung.dungeonsguide.dungeon; +import com.google.common.collect.BiMap; +import com.google.common.collect.EnumHashBiMap; +import com.google.common.collect.HashBiMap; import com.google.common.collect.Sets; import kr.syeyoung.dungeonsguide.e; import kr.syeyoung.dungeonsguide.SkyblockStatus; @@ -14,6 +17,7 @@ import net.minecraft.item.ItemMap; import net.minecraft.item.ItemStack; import net.minecraft.util.BlockPos; import net.minecraft.util.ChatComponentText; +import net.minecraft.util.Vec3; import net.minecraft.world.storage.MapData; import net.minecraftforge.common.MinecraftForge; @@ -28,8 +32,16 @@ public class MapProcessor { private byte[] lastMapData; + @Getter + private MapData lastMapData2; + + private BiMap<String, String> mapIconToPlayerMap = HashBiMap.create(); + + @Getter private Dimension unitRoomDimension; + @Getter private Dimension doorDimension; // width: width of door, height: gap between rooms + @Getter private Point topLeftMapPoint; private boolean bugged = false; @@ -50,12 +62,6 @@ public class MapProcessor { private static final Set<Vector2d> directions = Sets.newHashSet(new Vector2d(0,1), new Vector2d(0, -1), new Vector2d(1, 0), new Vector2d(-1 , 0)); - public boolean isInBossRoom() { - Point roomPt = worldPointToRoomPoint(Minecraft.getMinecraft().thePlayer.getPosition()); - Point mapPt = roomPointToMapPoint(roomPt); - return mapPt.x < 0 || mapPt.y < 0 || mapPt.x > 128 || mapPt.y > 128; - } - private int waitCnt = 0; private void buildMap(final byte[] mapData) { final Point startroom = MapUtils.findFirstColorWithIn(mapData, (byte) 30, new Rectangle(0,0,128,128)); @@ -168,6 +174,10 @@ public class MapProcessor { if (context.getDungeonMin() == null) return null; return new Point((worldPoint.getX() - context.getDungeonMin().getX()) / 32, (worldPoint.getZ() - context.getDungeonMin().getZ()) / 32); } + public Point worldPointToMapPoint(Vec3 worldPoint) { + if (context.getDungeonMin() == null) return null; + return new Point(topLeftMapPoint.x + (int)((worldPoint.xCoord - context.getDungeonMin().getX()) / 32.0f * (unitRoomDimension.width + doorDimension.height)), topLeftMapPoint.y + (int)((worldPoint.zCoord - context.getDungeonMin().getZ()) / 32.0f * (unitRoomDimension.height + doorDimension.height))); + } private void processMap(byte[] mapData) { int height = (int)((128.0 - topLeftMapPoint.y) / (unitRoomDimension.height + doorDimension.height)); @@ -184,7 +194,7 @@ public class MapProcessor { if (color == 30 || color == 18) { dungeonRoom.setCurrentState(DungeonRoom.RoomState.FINISHED); dungeonRoom.setTotalSecrets(0); - } else { + } else if (dungeonRoom.getCurrentState() != DungeonRoom.RoomState.FINISHED){ byte centerColor = MapUtils.getMapColorAt(mapData, mapPoint.x + unitRoomDimension.width / 2, mapPoint.y + unitRoomDimension.height / 2); MapUtils.record(mapData, mapPoint.x + unitRoomDimension.width / 2, mapPoint.y + unitRoomDimension.height / 2, new Color(0,255,0,80)); if (centerColor == 34) { @@ -302,12 +312,22 @@ public class MapProcessor { } else { MapData mapData1 = ((ItemMap)stack.getItem()).getMapData(stack, context.getWorld()); if (mapData1 == null) mapData = lastMapData; - else mapData = mapData1.colors; + else { + mapData = mapData1.colors; + lastMapData2 = mapData1; + } } if (lastMapData == null && mapData != null) buildMap(mapData); else if (mapData != null) processMap(mapData); + if (lastMapData2 != null && mapIconToPlayerMap.size() < context.getPlayers().size()) { + + for (String player : context.getPlayers()) { + + } + } + lastMapData = mapData; } } diff --git a/src/main/java/kr/syeyoung/dungeonsguide/e.java b/src/main/java/kr/syeyoung/dungeonsguide/e.java index 7e614758..e6ceb704 100755 --- a/src/main/java/kr/syeyoung/dungeonsguide/e.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/e.java @@ -45,10 +45,7 @@ public class e implements c { Minecraft.getMinecraft().thePlayer.addChatMessage(iChatComponent); } - public void init(FMLInitializationEvent event) - { - - + public void init(FMLInitializationEvent event) { dungeonsGuide = this; skyblockStatus = new SkyblockStatus(); diff --git a/src/main/java/kr/syeyoung/dungeonsguide/eventlistener/DungeonListener.java b/src/main/java/kr/syeyoung/dungeonsguide/eventlistener/DungeonListener.java index 536476eb..671bedbd 100755 --- a/src/main/java/kr/syeyoung/dungeonsguide/eventlistener/DungeonListener.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/eventlistener/DungeonListener.java @@ -65,13 +65,14 @@ public class DungeonListener { MapUtils.clearMap(); return; } - if (isOnDungeon) { - skyblockStatus.getContext().tick(); - } - else { - skyblockStatus.setContext(new DungeonContext(Minecraft.getMinecraft().thePlayer.worldObj)); - MinecraftForge.EVENT_BUS.post(new DungeonStartedEvent()); - } + if (isOnSkyblock) { + if (isOnDungeon && skyblockStatus.isOnDungeon()) { + skyblockStatus.getContext().tick(); + } else if (skyblockStatus.isOnDungeon()){ + skyblockStatus.setContext(new DungeonContext(Minecraft.getMinecraft().thePlayer.worldObj)); + MinecraftForge.EVENT_BUS.post(new DungeonStartedEvent()); + } + } } if (!skyblockStatus.isOnDungeon()) return; diff --git a/src/main/java/kr/syeyoung/dungeonsguide/eventlistener/FeatureListener.java b/src/main/java/kr/syeyoung/dungeonsguide/eventlistener/FeatureListener.java index c63b5e51..8225f5fe 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/eventlistener/FeatureListener.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/eventlistener/FeatureListener.java @@ -224,4 +224,16 @@ public class FeatureListener { t.printStackTrace(); } } + @SubscribeEvent + public void onDungeonInitialize(BossroomEnterEvent enterEvent) { + try { + for (AbstractFeature abstractFeature : FeatureRegistry.getFeatureList()) { + if (abstractFeature instanceof BossroomEnterListener) { + ((BossroomEnterListener) abstractFeature).onBossroomEnter(); + } + } + } catch (Throwable t) { + t.printStackTrace(); + } + } } diff --git a/src/main/java/kr/syeyoung/dungeonsguide/events/BossroomEnterEvent.java b/src/main/java/kr/syeyoung/dungeonsguide/events/BossroomEnterEvent.java new file mode 100644 index 00000000..210ff663 --- /dev/null +++ b/src/main/java/kr/syeyoung/dungeonsguide/events/BossroomEnterEvent.java @@ -0,0 +1,6 @@ +package kr.syeyoung.dungeonsguide.events; + +import net.minecraftforge.fml.common.eventhandler.Event; + +public class BossroomEnterEvent extends Event { +} diff --git a/src/main/java/kr/syeyoung/dungeonsguide/features/FeatureRegistry.java b/src/main/java/kr/syeyoung/dungeonsguide/features/FeatureRegistry.java index 71c9eb49..7022243e 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/features/FeatureRegistry.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/features/FeatureRegistry.java @@ -66,4 +66,5 @@ public class FeatureRegistry { public static final FeatureDungeonScore DUNGEON_SCORE = register(new FeatureDungeonScore()); public static final FeatureWarnLowHealth DUNGEON_LOWHEALTH_WARN = register(new FeatureWarnLowHealth()); public static final SimpleFeature DUNGEON_INTERMODCOMM = register(new SimpleFeature("Dungeon", "Communicate With Other's Dungeons Guide", "Sends total secret in the room to others\nSo that they can use the data to calculate total secret in dungeon run", "dungeon.intermodcomm", true)); + public static final FeatureDungeonMap DUNGEON_MAP = register(new FeatureDungeonMap()); } diff --git a/src/main/java/kr/syeyoung/dungeonsguide/features/impl/FeatureDisableMessage.java b/src/main/java/kr/syeyoung/dungeonsguide/features/impl/FeatureDisableMessage.java index e4ac78c7..50bb0211 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/features/impl/FeatureDisableMessage.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/features/impl/FeatureDisableMessage.java @@ -31,19 +31,19 @@ public class FeatureDisableMessage extends SimpleFeature implements ChatListener private static final MessageData[] PRE_DEFINED = new MessageData[] { new MessageData(Pattern.compile("§r§cThere are blocks in the way!§r"), "Aote block message", "\"There are blocks in the way!\"", "aote"), - new MessageData(Pattern.compile("§r§cThis ability is currently on cooldown for .+ more seconds\\.§r"), "Ability cooldown message", "\"This ability is currently on cooldown for 3 more seconds.\"", "cooldown"), + new MessageData(Pattern.compile("§r§cThis ability is currently on cooldown for .+ more seconds?\\.§r"), "Ability cooldown message", "\"This ability is currently on cooldown for 3 more seconds.\"", "cooldown"), new MessageData(Pattern.compile("§r§cWhow! Slow down there!§r"), "Grappling hook cooldown", "\"Whow! Slow down there!\"", "grappling"), new MessageData(Pattern.compile("§r§cNo more charges, next one in §r§e.+§r§cs!§r"), "Zombie Sword Charging", "\"No more charges, next one in 3s!\"", "zombie"), new MessageData(Pattern.compile("§r§7Your .+ hit §r§c.+ §r§7enem(?:y|ies) for §r§c.+ §r§7damage\\.§r"), "Ability Damage", "\"Your blahblah hit 42 enemy for a lots of damage\"", "ability"), new MessageData(Pattern.compile("§r§cYou do not have enough mana to do this!§r"), "Not enough mana", "\"You do not have enough mana to do this!\"", "mana"), new MessageData(Pattern.compile("§r§aUsed §r.+§r§a!§r"), "Dungeon Ability Usage", "\"Used Guided Sheep!\" and such", "dungeonability"), - new MessageData(Pattern.compile("D§r.+§r§a is ready to use! Press §r.+§r§a to activate it!§r"), "Ready to use message", "\"Blah is ready to use! Press F to activate it!", "readytouse"), + new MessageData(Pattern.compile("§r.+§r§a is ready to use! Press §r.+§r§a to activate it!§r"), "Ready to use message", "\"Blah is ready to use! Press F to activate it!", "readytouse"), new MessageData(Pattern.compile("§r.+ §r§ais now available!§r"), "Ability Available","\"blah is now available!\"", "available"), new MessageData(Pattern.compile("§r§cThe Stone doesn't seem to do anything here\\.§r"), "Stone Message", "\"The Stone doesn't seem to do anything here\"", "stone") }; public FeatureDisableMessage() { - super("Fixes", "Disable ability messages", "Do not let ability messages show up in chatbox\nclick on Edit for more precise settings", "fixes.messagedisable", true); + super("fixes", "Disable ability messages", "Do not let ability messages show up in chatbox\nclick on Edit for more precise settings", "fixes.messagedisable", true); for (MessageData messageData : PRE_DEFINED) { this.parameters.put(messageData.key, new FeatureParameter<Boolean>(messageData.key, messageData.name, messageData.description, true, "boolean")); } diff --git a/src/main/java/kr/syeyoung/dungeonsguide/features/impl/FeatureDungeonMap.java b/src/main/java/kr/syeyoung/dungeonsguide/features/impl/FeatureDungeonMap.java new file mode 100644 index 00000000..67b2dfac --- /dev/null +++ b/src/main/java/kr/syeyoung/dungeonsguide/features/impl/FeatureDungeonMap.java @@ -0,0 +1,301 @@ +package kr.syeyoung.dungeonsguide.features.impl; + +import com.google.common.collect.ComparisonChain; +import com.google.common.collect.Ordering; +import com.mojang.authlib.GameProfile; +import kr.syeyoung.dungeonsguide.SkyblockStatus; +import kr.syeyoung.dungeonsguide.dungeon.DungeonContext; +import kr.syeyoung.dungeonsguide.dungeon.MapProcessor; +import kr.syeyoung.dungeonsguide.dungeon.roomfinder.DungeonRoom; +import kr.syeyoung.dungeonsguide.e; +import kr.syeyoung.dungeonsguide.features.FeatureParameter; +import kr.syeyoung.dungeonsguide.features.GuiFeature; +import kr.syeyoung.dungeonsguide.features.listener.BossroomEnterListener; +import kr.syeyoung.dungeonsguide.features.listener.ChatListener; +import kr.syeyoung.dungeonsguide.features.listener.DungeonEndListener; +import kr.syeyoung.dungeonsguide.features.listener.DungeonStartListener; +import kr.syeyoung.dungeonsguide.utils.TextUtils; +import net.minecraft.block.material.MapColor; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.gui.Gui; +import net.minecraft.client.gui.GuiPlayerTabOverlay; +import net.minecraft.client.gui.MapItemRenderer; +import net.minecraft.client.network.NetworkPlayerInfo; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.WorldRenderer; +import net.minecraft.client.renderer.texture.DynamicTexture; +import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EnumPlayerModelParts; +import net.minecraft.scoreboard.ScorePlayerTeam; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.MathHelper; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.Vec4b; +import net.minecraft.world.WorldSettings; +import net.minecraft.world.storage.MapData; +import net.minecraftforge.client.event.ClientChatReceivedEvent; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; +import org.lwjgl.opengl.GL11; + +import java.awt.*; +import java.util.List; +import java.util.Comparator; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class FeatureDungeonMap extends GuiFeature implements DungeonEndListener, DungeonStartListener, BossroomEnterListener { + public FeatureDungeonMap() { + super("Dungeon", "Dungeon Map", "Display dungeon map!", "dungeon.map", true, 512,512); + this.setEnabled(false); + parameters.put("scale", new FeatureParameter<Boolean>("scale", "Scale map", "Whether to scale map to fit screen", true, "boolean")); + parameters.put("playerCenter", new FeatureParameter<Boolean>("playerCenter", "Center map at player", "Render you in the center", false, "boolean")); + parameters.put("rotate", new FeatureParameter<Boolean>("rotate", "Rotate map centered at player", "Only works with Center map at player enabled", false, "boolean")); + parameters.put("postScale", new FeatureParameter<Float>("postScale", "Scale factor of map", "Only works with Center map at player enabled", 1.0f, "float")); + parameters.put("showotherplayers", new FeatureParameter<Boolean>("showotherplayers", "Show other players", "Option to show other players in map", true, "boolean")); + } + + SkyblockStatus skyblockStatus = e.getDungeonsGuide().getSkyblockStatus(); + public static final Ordering<NetworkPlayerInfo> field_175252_a = Ordering.from(new PlayerComparator()); + + private boolean on = false; + + @Override + public void onDungeonEnd() { + on = false; + } + + @Override + public void onDungeonStart() { + on = true; + } + + @Override + public void onBossroomEnter() { + on = false; + } + + @SideOnly(Side.CLIENT) + static class PlayerComparator implements Comparator<NetworkPlayerInfo> + { + |
