diff options
| author | syeyoung <cyong06@naver.com> | 2021-01-09 14:00:44 +0900 |
|---|---|---|
| committer | syeyoung <cyong06@naver.com> | 2021-01-09 14:00:44 +0900 |
| commit | 3513364b2177cb88c57284c113b367000e93f2e5 (patch) | |
| tree | dcfc0401cada0bfe319422fa3fe1c61493498777 /src/main/java/kr/syeyoung/dungeonsguide/dungeon | |
| parent | b382461db0b5fb96271bf548fa5aa89f0981ae05 (diff) | |
| download | Skyblock-Dungeons-Guide-3513364b2177cb88c57284c113b367000e93f2e5.tar.gz Skyblock-Dungeons-Guide-3513364b2177cb88c57284c113b367000e93f2e5.tar.bz2 Skyblock-Dungeons-Guide-3513364b2177cb88c57284c113b367000e93f2e5.zip | |
what?
Diffstat (limited to 'src/main/java/kr/syeyoung/dungeonsguide/dungeon')
| -rwxr-xr-x | src/main/java/kr/syeyoung/dungeonsguide/dungeon/DungeonContext.java | 29 | ||||
| -rwxr-xr-x | src/main/java/kr/syeyoung/dungeonsguide/dungeon/MapProcessor.java | 36 |
2 files changed, 56 insertions, 9 deletions
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; } } |
