diff options
| author | syeyoung <cyong06@naver.com> | 2021-02-11 14:52:11 +0900 |
|---|---|---|
| committer | syeyoung <cyong06@naver.com> | 2021-02-11 14:52:11 +0900 |
| commit | 55d27afb28fee28bf374c1ce73fac6f04400a276 (patch) | |
| tree | 72f88b5cdc1ea2dadcd4d6aa767b502f0f6f826d /src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions | |
| parent | dc10bc94b98a7b252af22e6a3c3f7f035ab4b231 (diff) | |
| download | Skyblock-Dungeons-Guide-55d27afb28fee28bf374c1ce73fac6f04400a276.tar.gz Skyblock-Dungeons-Guide-55d27afb28fee28bf374c1ce73fac6f04400a276.tar.bz2 Skyblock-Dungeons-Guide-55d27afb28fee28bf374c1ce73fac6f04400a276.zip | |
navigation
Diffstat (limited to 'src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions')
4 files changed, 75 insertions, 0 deletions
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/AbstractAction.java b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/AbstractAction.java index 16cd7ab0..85897a9b 100644 --- a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/AbstractAction.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/AbstractAction.java @@ -1,6 +1,7 @@ package kr.syeyoung.dungeonsguide.dungeon.actions; import kr.syeyoung.dungeonsguide.dungeon.roomfinder.DungeonRoom; +import kr.syeyoung.dungeonsguide.events.PlayerInteractEntityEvent; import net.minecraftforge.event.entity.living.LivingDeathEvent; import net.minecraftforge.event.entity.player.PlayerInteractEvent; @@ -26,6 +27,11 @@ public abstract class AbstractAction implements Action { } @Override + public void onLivingInteract(DungeonRoom dungeonRoom, PlayerInteractEntityEvent event) { + + } + + @Override public void onTick(DungeonRoom dungeonRoom) { } diff --git a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/Action.java b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/Action.java index 496439b8..fc77c192 100755 --- a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/Action.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/Action.java @@ -1,6 +1,7 @@ package kr.syeyoung.dungeonsguide.dungeon.actions; import kr.syeyoung.dungeonsguide.dungeon.roomfinder.DungeonRoom; +import kr.syeyoung.dungeonsguide.events.PlayerInteractEntityEvent; import net.minecraftforge.event.entity.living.LivingDeathEvent; import net.minecraftforge.event.entity.player.PlayerInteractEvent; @@ -10,6 +11,7 @@ public interface Action { Set<Action> getPreRequisites(DungeonRoom dungeonRoom); void onPlayerInteract(DungeonRoom dungeonRoom, PlayerInteractEvent event); + void onLivingInteract(DungeonRoom dungeonRoom, PlayerInteractEntityEvent event); void onLivingDeath(DungeonRoom dungeonRoom, LivingDeathEvent event); void onRenderWorld(DungeonRoom dungeonRoom, float partialTicks); void onRenderScreen(DungeonRoom dungeonRoom, float partialTicks); diff --git a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/ActionChangeState.java b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/ActionChangeState.java index 0a897ddd..fb1b76d7 100755 --- a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/ActionChangeState.java +++ b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/ActionChangeState.java @@ -1,5 +1,6 @@ package kr.syeyoung.dungeonsguide.dungeon.actions; +import kr.syeyoung.dungeonsguide.dungeon.mechanics.DungeonFairySoul; import kr.syeyoung.dungeonsguide.dungeon.mechanics.DungeonMechanic; import kr.syeyoung.dungeonsguide.dungeon.mechanics.DungeonSecret; import kr.syeyoung.dungeonsguide.dungeon.roomfinder.DungeonRoom; @@ -39,10 +40,14 @@ public class ActionChangeState extends AbstractAction{ @Override public boolean isComplete(DungeonRoom dungeonRoom) { DungeonMechanic mechanic = dungeonRoom.getDungeonRoomInfo().getMechanics().get(mechanicName); + if (state.equalsIgnoreCase("navigate")) + return true; if (mechanic== null) return false; if (mechanic instanceof DungeonSecret && ((DungeonSecret) mechanic).getSecretType() != DungeonSecret.SecretType.CHEST) return true; + if (mechanic instanceof DungeonFairySoul) + return true; return mechanic.getCurrentState(dungeonRoom).equalsIgnoreCase(state); } } diff --git a/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/ActionInteract.java b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/ActionInteract.java new file mode 100755 index 00000000..b3be996a --- /dev/null +++ b/src/main/java/kr/syeyoung/dungeonsguide/dungeon/actions/ActionInteract.java @@ -0,0 +1,62 @@ +package kr.syeyoung.dungeonsguide.dungeon.actions; + +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import kr.syeyoung.dungeonsguide.dungeon.EntitySpawnManager; +import kr.syeyoung.dungeonsguide.dungeon.data.OffsetPoint; +import kr.syeyoung.dungeonsguide.dungeon.roomfinder.DungeonRoom; +import kr.syeyoung.dungeonsguide.events.PlayerInteractEntityEvent; +import kr.syeyoung.dungeonsguide.utils.RenderUtils; +import lombok.Data; +import net.minecraft.entity.Entity; +import net.minecraft.util.BlockPos; +import net.minecraft.util.Vec3; + +import java.awt.*; +import java.util.HashSet; +import java.util.Set; + +@Data +public class ActionInteract extends AbstractAction { + private Set<Action> preRequisite = new HashSet<Action>(); + private OffsetPoint target; + private Predicate<Entity> predicate = Predicates.alwaysFalse(); + private int radius; + + public ActionInteract(OffsetPoint target) { + this.target = target; + } + + @Override + public Set<Action> getPreRequisites(DungeonRoom dungeonRoom) { + return preRequisite; + } + + @Override + public boolean isComplete(DungeonRoom dungeonRoom) { + return interacted; + } + + private boolean interacted = false; + @Override + public void onLivingInteract(DungeonRoom dungeonRoom, PlayerInteractEntityEvent event) { + if (interacted) return; + + Vec3 spawnLoc = EntitySpawnManager.getSpawnLocation().get(event.getEntity().getEntityId()); + if (spawnLoc == null) return; + if (target.getBlockPos(dungeonRoom).distanceSq(spawnLoc.xCoord, spawnLoc.yCoord, spawnLoc.zCoord) > radius * radius) return; + if (!predicate.apply(event.getEntity())) return; + interacted = true; + } + @Override + public void onRenderWorld(DungeonRoom dungeonRoom, float partialTicks) { + BlockPos pos = target.getBlockPos(dungeonRoom); + RenderUtils.highlightBlock(pos, new Color(0, 255,255,50),partialTicks, true); + RenderUtils.drawTextAtWorld("Interact", pos.getX() + 0.5f, pos.getY() + 0.3f, pos.getZ() + 0.5f, 0xFFFFFF00, 0.02f, false, false, partialTicks); + } + + @Override + public String toString() { + return "InteractEntity\n- target: "+target.toString()+"\n- radius: "+radius+"\n- predicate: "+(predicate == null ? "null" : predicate.getClass().getSimpleName()); + } +} |
