aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/kr/syeyoung/dungeonsguide/dungeon
diff options
context:
space:
mode:
authorsyeyoung <cyong06@naver.com>2021-01-09 14:00:44 +0900
committersyeyoung <cyong06@naver.com>2021-01-09 14:00:44 +0900
commit3513364b2177cb88c57284c113b367000e93f2e5 (patch)
treedcfc0401cada0bfe319422fa3fe1c61493498777 /src/main/java/kr/syeyoung/dungeonsguide/dungeon
parentb382461db0b5fb96271bf548fa5aa89f0981ae05 (diff)
downloadSkyblock-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-xsrc/main/java/kr/syeyoung/dungeonsguide/dungeon/DungeonContext.java29
-rwxr-xr-xsrc/main/java/kr/syeyoung/dungeonsguide/dungeon/MapProcessor.java36
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;
}
}