diff --git a/core/src/main/java/com/rettichlp/unicacityaddon/UnicacityAddon.java b/core/src/main/java/com/rettichlp/unicacityaddon/UnicacityAddon.java index 4934456ed..8c512e0cf 100644 --- a/core/src/main/java/com/rettichlp/unicacityaddon/UnicacityAddon.java +++ b/core/src/main/java/com/rettichlp/unicacityaddon/UnicacityAddon.java @@ -15,6 +15,7 @@ import com.rettichlp.unicacityaddon.controller.DeadBodyController; import com.rettichlp.unicacityaddon.controller.GuiController; import com.rettichlp.unicacityaddon.controller.PlayerListController; +import com.rettichlp.unicacityaddon.controller.RenderController; import com.rettichlp.unicacityaddon.controller.ScreenshotController; import com.rettichlp.unicacityaddon.controller.SoundController; import com.rettichlp.unicacityaddon.controller.TransportController; @@ -130,6 +131,7 @@ protected void enable() { this.registry.registerHudWidgets(); this.registry.registerListeners(); this.registry.registerCommands(); + this.registry.registerGangzones(); new Thread(this.teamSpeakAPI::initialize).start(); @@ -153,6 +155,10 @@ public PlayerListController playerListController() { return controller().getPlayerListController(); } + public RenderController renderController() { + return controller().getRenderController(); + } + public ScreenshotController screenshotController() { return controller().getScreenshotController(); } diff --git a/core/src/main/java/com/rettichlp/unicacityaddon/base/DefaultAddonPlayer.java b/core/src/main/java/com/rettichlp/unicacityaddon/base/DefaultAddonPlayer.java index 320d9e9e5..a16ad8d68 100644 --- a/core/src/main/java/com/rettichlp/unicacityaddon/base/DefaultAddonPlayer.java +++ b/core/src/main/java/com/rettichlp/unicacityaddon/base/DefaultAddonPlayer.java @@ -184,7 +184,7 @@ public boolean isSuperUser() { @Override public boolean hasGangwar() { - return getScoreboard().getScores(getScoreboard().getObjective(DisplaySlot.SIDEBAR)).stream() + return this.unicacityAddon.configuration().gangwar().get() || getScoreboard().getScores(getScoreboard().getObjective(DisplaySlot.SIDEBAR)).stream() .map(ScoreboardScore::getName) .anyMatch(s -> s.contains("Angreifer") || s.contains("Verteidiger")); } diff --git a/core/src/main/java/com/rettichlp/unicacityaddon/base/config/DefaultUnicacityAddonConfiguration.java b/core/src/main/java/com/rettichlp/unicacityaddon/base/config/DefaultUnicacityAddonConfiguration.java index 4976b9ab3..ca7c519f4 100644 --- a/core/src/main/java/com/rettichlp/unicacityaddon/base/config/DefaultUnicacityAddonConfiguration.java +++ b/core/src/main/java/com/rettichlp/unicacityaddon/base/config/DefaultUnicacityAddonConfiguration.java @@ -105,6 +105,9 @@ public class DefaultUnicacityAddonConfiguration extends AddonConfig implements U @SwitchSetting private final ConfigProperty debug = new ConfigProperty<>(false); + @SwitchSetting + private final ConfigProperty gangwar = new ConfigProperty<>(false); + @SwitchSetting private final ConfigProperty local = new ConfigProperty<>(false); @@ -203,6 +206,11 @@ public ConfigProperty debug() { return this.debug; } + @Override + public ConfigProperty gangwar() { + return this.gangwar; + } + @Override public ConfigProperty local() { return this.local; diff --git a/core/src/main/java/com/rettichlp/unicacityaddon/base/config/UnicacityAddonConfiguration.java b/core/src/main/java/com/rettichlp/unicacityaddon/base/config/UnicacityAddonConfiguration.java index d74164c82..aa12c98c8 100644 --- a/core/src/main/java/com/rettichlp/unicacityaddon/base/config/UnicacityAddonConfiguration.java +++ b/core/src/main/java/com/rettichlp/unicacityaddon/base/config/UnicacityAddonConfiguration.java @@ -71,5 +71,7 @@ public interface UnicacityAddonConfiguration { ConfigProperty debug(); + ConfigProperty gangwar(); + ConfigProperty local(); } \ No newline at end of file diff --git a/core/src/main/java/com/rettichlp/unicacityaddon/base/config/hotkey/DefaultHotkeyConfiguration.java b/core/src/main/java/com/rettichlp/unicacityaddon/base/config/hotkey/DefaultHotkeyConfiguration.java index 5e09c3d94..40be35558 100644 --- a/core/src/main/java/com/rettichlp/unicacityaddon/base/config/hotkey/DefaultHotkeyConfiguration.java +++ b/core/src/main/java/com/rettichlp/unicacityaddon/base/config/hotkey/DefaultHotkeyConfiguration.java @@ -40,6 +40,9 @@ public class DefaultHotkeyConfiguration extends Config implements HotkeyConfigur @KeyBindSetting private final ConfigProperty screenshot = new ConfigProperty<>(Key.NONE); + @KeyBindSetting + private final ConfigProperty showGangzones = new ConfigProperty<>(Key.NONE); + @Override public ConfigProperty enabled() { return this.enabled; @@ -84,4 +87,9 @@ public ConfigProperty aEquip() { public ConfigProperty screenshot() { return this.screenshot; } + + @Override + public ConfigProperty showGangzones() { + return this.showGangzones; + } } \ No newline at end of file diff --git a/core/src/main/java/com/rettichlp/unicacityaddon/base/config/hotkey/HotkeyConfiguration.java b/core/src/main/java/com/rettichlp/unicacityaddon/base/config/hotkey/HotkeyConfiguration.java index 76e879182..453e17b21 100644 --- a/core/src/main/java/com/rettichlp/unicacityaddon/base/config/hotkey/HotkeyConfiguration.java +++ b/core/src/main/java/com/rettichlp/unicacityaddon/base/config/hotkey/HotkeyConfiguration.java @@ -25,4 +25,6 @@ public interface HotkeyConfiguration { ConfigProperty aEquip(); ConfigProperty screenshot(); + + ConfigProperty showGangzones(); } \ No newline at end of file diff --git a/core/src/main/java/com/rettichlp/unicacityaddon/base/enums/faction/Faction.java b/core/src/main/java/com/rettichlp/unicacityaddon/base/enums/faction/Faction.java index cf481498a..d8aa3f4d6 100644 --- a/core/src/main/java/com/rettichlp/unicacityaddon/base/enums/faction/Faction.java +++ b/core/src/main/java/com/rettichlp/unicacityaddon/base/enums/faction/Faction.java @@ -12,61 +12,22 @@ @AllArgsConstructor public enum Faction { - NULL("", "Keine Auswahl", "", false, -1, -1, ""), - FBI("fbi", "FBI", "FBI", false, 106, 107, Message.getBuilder() - .of("◤").color(ColorCode.DARK_GRAY).advance() - .of("✯").color(ColorCode.DARK_BLUE).advance() - .of("◢").color(ColorCode.DARK_GRAY).advance().create()), - POLIZEI("polizei", "Polizei", "Polizei", false, 78, 79, Message.getBuilder() - .of("◤").color(ColorCode.DARK_GRAY).advance() - .of("✯").color(ColorCode.BLUE).advance() - .of("◢").color(ColorCode.DARK_GRAY).advance().create()), - RETTUNGSDIENST("rettungsdienst", "Rettungsdienst", "Rettungsdienst", false, 118, 119, Message.getBuilder() - .of("◤").color(ColorCode.DARK_GRAY).advance() - .of("✚").color(ColorCode.DARK_RED).advance() - .of("◢").color(ColorCode.DARK_GRAY).advance().create()), + NULL("", "Keine Auswahl", "", false, -1, -1, ColorCode.GRAY, ""), + FBI("fbi", "FBI", "FBI", false, 106, 107, ColorCode.DARK_BLUE, "✯"), + POLIZEI("polizei", "Polizei", "Polizei", false, 78, 79, ColorCode.BLUE, "✯"), + RETTUNGSDIENST("rettungsdienst", "Rettungsdienst", "Rettungsdienst", false, 118, 119, ColorCode.DARK_RED, "✚"), - CALDERON("calderon", "Calderón Kartell", "Kartell", true, 154, 155, Message.getBuilder() - .of("◤").color(ColorCode.DARK_GRAY).advance() - .of("☀").color(ColorCode.GOLD).advance() - .of("◢").color(ColorCode.DARK_GRAY).advance().create()), - KERZAKOV("kerzakov", "Kerzakov Familie", "Kerzakov", true, 166, 167, Message.getBuilder() - .of("◤").color(ColorCode.DARK_GRAY).advance() - .of("✮").color(ColorCode.RED).advance() - .of("◢").color(ColorCode.DARK_GRAY).advance().create()), - LACOSANOSTRA("lacosanostra", "La Cosa Nostra", "Mafia", true, 130, 131, Message.getBuilder() - .of("◤").color(ColorCode.DARK_GRAY).advance() - .of("⚜").color(ColorCode.DARK_AQUA).advance() - .of("◢").color(ColorCode.DARK_GRAY).advance().create()), - LEMILIEU("le_milieu", "Le Milieu", "France", true, 179, 180, Message.getBuilder() - .of("◤").color(ColorCode.DARK_GRAY).advance() - .of("Ⓜ").color(ColorCode.DARK_AQUA).advance() - .of("◢").color(ColorCode.DARK_GRAY).advance().create()), - OBRIEN("obrien", "O'brien Familie", "Obrien", true, 191, 192, Message.getBuilder() - .of("◤").color(ColorCode.DARK_GRAY).advance() - .of("☘").color(ColorCode.DARK_GREEN).advance() - .of("◢").color(ColorCode.DARK_GRAY).advance().create()), - WESTSIDEBALLAS("westsideballas", "Westside Ballas", "Gang", true, 142, 143, Message.getBuilder() - .of("◤").color(ColorCode.DARK_GRAY).advance() - .of("☠").color(ColorCode.DARK_PURPLE).advance() - .of("◢").color(ColorCode.DARK_GRAY).advance().create()), + CALDERON("calderon", "Calderón Kartell", "Kartell", true, 154, 155, ColorCode.GOLD, "☀"), + KERZAKOV("kerzakov", "Kerzakov Familie", "Kerzakov", true, 166, 167, ColorCode.RED, "✮"), + LACOSANOSTRA("lacosanostra", "La Cosa Nostra", "Mafia", true, 130, 131, ColorCode.DARK_AQUA, "⚜"), + LEMILIEU("le_milieu", "Le Milieu", "France", true, 179, 180, ColorCode.DARK_AQUA, "Ⓜ"), + OBRIEN("obrien", "O'brien Familie", "Obrien", true, 191, 192, ColorCode.DARK_GREEN, "☘"), + WESTSIDEBALLAS("westsideballas", "Westside Ballas", "Gang", true, 142, 143, ColorCode.DARK_PURPLE, "☠"), - HITMAN("hitman", "Hitman", "Hitman", false, 215, 216, Message.getBuilder() - .of("◤").color(ColorCode.DARK_GRAY).advance() - .of("➹").color(ColorCode.AQUA).advance() - .of("◢").color(ColorCode.DARK_GRAY).advance().create()), - KIRCHE("kirche", "Kirche", "Kirche", false, 227, 228, Message.getBuilder() - .of("◤").color(ColorCode.DARK_GRAY).advance() - .of("†").color(ColorCode.LIGHT_PURPLE).advance() - .of("◢").color(ColorCode.DARK_GRAY).advance().create()), - NEWS("news", "News Agency", "News", false, 239, 240, Message.getBuilder() - .of("◤").color(ColorCode.DARK_GRAY).advance() - .of("✉").color(ColorCode.YELLOW).advance() - .of("◢").color(ColorCode.DARK_GRAY).advance().create()), - TERRORISTEN("terroristen", "Terroristen", "Terroristen", false, 203, 204, Message.getBuilder() - .of("◤").color(ColorCode.DARK_GRAY).advance() - .of("❇").color(ColorCode.GRAY).advance() - .of("◢").color(ColorCode.DARK_GRAY).advance().create()); + HITMAN("hitman", "Hitman", "Hitman", false, 215, 216, ColorCode.AQUA, "➹"), + KIRCHE("kirche", "Kirche", "Kirche", false, 227, 228, ColorCode.LIGHT_PURPLE, "†"), + NEWS("news", "News Agency", "News", false, 239, 240, ColorCode.YELLOW, "✉"), + TERRORISTEN("terroristen", "Terroristen", "Terroristen", false, 203, 204, ColorCode.GRAY, "❇"); private final String apiName; private final String displayName; @@ -74,12 +35,20 @@ public enum Faction { private final boolean isBadFaction; private final int publicChannelId; private final int abstractedChannelId; - private final String nameTagSuffix; + private final ColorCode color; + private final String icon; public String getWebsiteUrl() { return this.equals(NULL) ? null : "https://unicacity.de/fraktionen/" + getApiName(); } + public String getNameTagSuffix() { + return !this.equals(NULL) ? Message.getBuilder() + .of("◤").color(ColorCode.DARK_GRAY).advance() + .of(this.icon).color(this.color).advance() + .of("◢").color(ColorCode.DARK_GRAY).advance().create() : ""; + } + public static Faction getFactionByDisplayName(String s) { for (Faction faction : Faction.values()) { if (faction.getDisplayName().equalsIgnoreCase(s)) diff --git a/core/src/main/java/com/rettichlp/unicacityaddon/base/gangzones/AbstractAttackableGangzone.java b/core/src/main/java/com/rettichlp/unicacityaddon/base/gangzones/AbstractAttackableGangzone.java new file mode 100644 index 000000000..457b783c9 --- /dev/null +++ b/core/src/main/java/com/rettichlp/unicacityaddon/base/gangzones/AbstractAttackableGangzone.java @@ -0,0 +1,32 @@ +package com.rettichlp.unicacityaddon.base.gangzones; + +import com.rettichlp.unicacityaddon.UnicacityAddon; +import com.rettichlp.unicacityaddon.base.registry.annotation.UCGangzone; +import com.rettichlp.unicacityaddon.base.text.ColorCode; +import net.labymod.api.util.Color; +import net.labymod.api.util.Pair; +import net.labymod.api.util.math.vector.FloatVector3; + +import java.util.List; + +public abstract class AbstractAttackableGangzone extends AbstractGangzone { + + private final UnicacityAddon unicacityAddon; + + public AbstractAttackableGangzone(UnicacityAddon unicacityAddon, UCGangzone ucGangzone) { + super(unicacityAddon, ucGangzone); + this.unicacityAddon = unicacityAddon; + } + + public abstract List> gangwarFacades(); + + public void renderGangwarFacades() { + Color color = Color.ORANGE; + this.gangwarFacades().forEach(posPair -> this.unicacityAddon.renderController().drawFacade(posPair.getFirst(), posPair.getSecond(), color)); + } + + public void renderGangwarOutline() { + Color color = Color.BLACK; + this.gangwarFacades().forEach(posPair -> this.unicacityAddon.renderController().drawOutline(posPair.getFirst(), posPair.getSecond(), color)); + } +} diff --git a/core/src/main/java/com/rettichlp/unicacityaddon/base/gangzones/AbstractGangzone.java b/core/src/main/java/com/rettichlp/unicacityaddon/base/gangzones/AbstractGangzone.java new file mode 100644 index 000000000..00b50f2a4 --- /dev/null +++ b/core/src/main/java/com/rettichlp/unicacityaddon/base/gangzones/AbstractGangzone.java @@ -0,0 +1,32 @@ +package com.rettichlp.unicacityaddon.base.gangzones; + +import com.rettichlp.unicacityaddon.UnicacityAddon; +import com.rettichlp.unicacityaddon.base.registry.annotation.UCGangzone; +import net.labymod.api.util.Color; +import net.labymod.api.util.Pair; +import net.labymod.api.util.math.vector.FloatVector3; + +import java.util.List; + +public abstract class AbstractGangzone { + + private final UCGangzone ucGangzone; + + private final UnicacityAddon unicacityAddon; + + public AbstractGangzone(UnicacityAddon unicacityAddon, UCGangzone ucGangzone) { + this.unicacityAddon = unicacityAddon; + this.ucGangzone = ucGangzone; + } + + public abstract List> gangzoneFacades(); + + public void renderGangzoneFacades() { + Color color = this.ucGangzone.owner().getColor().getLabymodColor(); + this.gangzoneFacades().forEach(posPair -> this.unicacityAddon.renderController().drawFacade(posPair.getFirst(), posPair.getSecond(), color)); + } + + public void renderGangzoneOutline(Color color) { + this.gangzoneFacades().forEach(posPair -> this.unicacityAddon.renderController().drawOutline(posPair.getFirst(), posPair.getSecond(), color)); + } +} diff --git a/core/src/main/java/com/rettichlp/unicacityaddon/base/gangzones/Altstadt.java b/core/src/main/java/com/rettichlp/unicacityaddon/base/gangzones/Altstadt.java new file mode 100644 index 000000000..2ec1a486f --- /dev/null +++ b/core/src/main/java/com/rettichlp/unicacityaddon/base/gangzones/Altstadt.java @@ -0,0 +1,75 @@ +package com.rettichlp.unicacityaddon.base.gangzones; + +import com.rettichlp.unicacityaddon.UnicacityAddon; +import com.rettichlp.unicacityaddon.base.registry.annotation.UCGangzone; +import net.labymod.api.util.Pair; +import net.labymod.api.util.math.vector.FloatVector3; + +import java.util.List; + +/** + * @author RettichLP + */ +@UCGangzone +public class Altstadt extends AbstractAttackableGangzone { + + public Altstadt(UnicacityAddon unicacityAddon, UCGangzone ucGangzone) { + super(unicacityAddon, ucGangzone); + } + + @Override + public List> gangzoneFacades() { + return List.of( + Pair.of(new FloatVector3(195, 69, 589), new FloatVector3(195, 69, 637)), + Pair.of(new FloatVector3(195, 69, 637), new FloatVector3(182, 69, 637)), + Pair.of(new FloatVector3(182, 69, 637), new FloatVector3(182, 69, 647)), + Pair.of(new FloatVector3(182, 69, 647), new FloatVector3(174, 69, 647)), + Pair.of(new FloatVector3(174, 69, 647), new FloatVector3(174, 69, 677)), + Pair.of(new FloatVector3(174, 69, 677), new FloatVector3(178, 69, 677)), + Pair.of(new FloatVector3(178, 69, 677), new FloatVector3(178, 69, 687)), + Pair.of(new FloatVector3(178, 69, 687), new FloatVector3(182, 69, 687)), + Pair.of(new FloatVector3(182, 69, 687), new FloatVector3(182, 69, 745)), + Pair.of(new FloatVector3(182, 69, 745), new FloatVector3(176, 69, 745)), + Pair.of(new FloatVector3(176, 69, 745), new FloatVector3(176, 69, 768)), + Pair.of(new FloatVector3(176, 69, 768), new FloatVector3(182, 69, 768)), + Pair.of(new FloatVector3(182, 69, 768), new FloatVector3(182, 69, 794)), + Pair.of(new FloatVector3(182, 69, 794), new FloatVector3(192, 69, 794)), + Pair.of(new FloatVector3(192, 69, 794), new FloatVector3(192, 69, 848)), + Pair.of(new FloatVector3(192, 69, 848), new FloatVector3(304, 69, 848)), + Pair.of(new FloatVector3(304, 69, 848), new FloatVector3(304, 69, 824)), + Pair.of(new FloatVector3(304, 69, 824), new FloatVector3(316, 69, 824)), + Pair.of(new FloatVector3(316, 69, 824), new FloatVector3(316, 69, 803)), + Pair.of(new FloatVector3(316, 69, 803), new FloatVector3(314, 69, 803)), + Pair.of(new FloatVector3(314, 69, 803), new FloatVector3(314, 69, 786)), + Pair.of(new FloatVector3(314, 69, 786), new FloatVector3(313, 69, 786)), + Pair.of(new FloatVector3(313, 69, 786), new FloatVector3(313, 69, 589)), + Pair.of(new FloatVector3(313, 69, 589), new FloatVector3(195, 69, 589)) + ); + } + + @Override + public List> gangwarFacades() { + return List.of( + Pair.of(new FloatVector3(145, 69, 539), new FloatVector3(145, 69, 587)), + Pair.of(new FloatVector3(145, 69, 587), new FloatVector3(132, 69, 587)), + Pair.of(new FloatVector3(132, 69, 587), new FloatVector3(132, 69, 597)), + Pair.of(new FloatVector3(132, 69, 597), new FloatVector3(124, 69, 597)), + Pair.of(new FloatVector3(124, 69, 597), new FloatVector3(124, 69, 727)), + Pair.of(new FloatVector3(124, 69, 727), new FloatVector3(126, 69, 727)), + Pair.of(new FloatVector3(126, 69, 727), new FloatVector3(126, 69, 818)), + Pair.of(new FloatVector3(126, 69, 818), new FloatVector3(132, 69, 818)), + Pair.of(new FloatVector3(132, 69, 818), new FloatVector3(132, 69, 844)), + Pair.of(new FloatVector3(132, 69, 844), new FloatVector3(142, 69, 844)), + Pair.of(new FloatVector3(142, 69, 844), new FloatVector3(142, 69, 898)), + Pair.of(new FloatVector3(142, 69, 898), new FloatVector3(354, 69, 898)), + Pair.of(new FloatVector3(354, 69, 898), new FloatVector3(354, 69, 874)), + Pair.of(new FloatVector3(354, 69, 874), new FloatVector3(366, 69, 874)), + Pair.of(new FloatVector3(366, 69, 874), new FloatVector3(366, 69, 753)), + Pair.of(new FloatVector3(366, 69, 753), new FloatVector3(364, 69, 753)), + Pair.of(new FloatVector3(364, 69, 753), new FloatVector3(364, 69, 736)), + Pair.of(new FloatVector3(364, 69, 736), new FloatVector3(363, 69, 736)), + Pair.of(new FloatVector3(363, 69, 736), new FloatVector3(363, 69, 539)), + Pair.of(new FloatVector3(363, 69, 539), new FloatVector3(145, 69, 539)) + ); + } +} diff --git a/core/src/main/java/com/rettichlp/unicacityaddon/base/gangzones/Calderon.java b/core/src/main/java/com/rettichlp/unicacityaddon/base/gangzones/Calderon.java new file mode 100644 index 000000000..b3cc9e3cd --- /dev/null +++ b/core/src/main/java/com/rettichlp/unicacityaddon/base/gangzones/Calderon.java @@ -0,0 +1,30 @@ +package com.rettichlp.unicacityaddon.base.gangzones; + +import com.rettichlp.unicacityaddon.UnicacityAddon; +import com.rettichlp.unicacityaddon.base.enums.faction.Faction; +import com.rettichlp.unicacityaddon.base.registry.annotation.UCGangzone; +import net.labymod.api.util.Pair; +import net.labymod.api.util.math.vector.FloatVector3; + +import java.util.List; + +/** + * @author RettichLP + */ +@UCGangzone(owner = Faction.CALDERON) +public class Calderon extends AbstractGangzone { + + public Calderon(UnicacityAddon unicacityAddon, UCGangzone ucGangzone) { + super(unicacityAddon, ucGangzone); + } + + @Override + public List> gangzoneFacades() { + return List.of( + Pair.of(new FloatVector3(-343, 69, -149), new FloatVector3(-343, 69, -84)), + Pair.of(new FloatVector3(-343, 69, -84), new FloatVector3(-251, 69, -84)), + Pair.of(new FloatVector3(-251, 69, -84), new FloatVector3(-251, 69, -149)), + Pair.of(new FloatVector3(-251, 69, -149), new FloatVector3(-343, 69, -149)) + ); + } +} diff --git a/core/src/main/java/com/rettichlp/unicacityaddon/base/gangzones/Farm.java b/core/src/main/java/com/rettichlp/unicacityaddon/base/gangzones/Farm.java new file mode 100644 index 000000000..8c8b86633 --- /dev/null +++ b/core/src/main/java/com/rettichlp/unicacityaddon/base/gangzones/Farm.java @@ -0,0 +1,55 @@ +package com.rettichlp.unicacityaddon.base.gangzones; + +import com.rettichlp.unicacityaddon.UnicacityAddon; +import com.rettichlp.unicacityaddon.base.registry.annotation.UCGangzone; +import net.labymod.api.util.Pair; +import net.labymod.api.util.math.vector.FloatVector3; + +import java.util.List; + +/** + * @author RettichLP + */ +@UCGangzone +public class Farm extends AbstractAttackableGangzone { + + public Farm(UnicacityAddon unicacityAddon, UCGangzone ucGangzone) { + super(unicacityAddon, ucGangzone); + } + + @Override + public List> gangzoneFacades() { + return List.of( + Pair.of(new FloatVector3(455, 69, 483), new FloatVector3(455, 69, 562)), + Pair.of(new FloatVector3(455, 69, 562), new FloatVector3(522, 69, 562)), + Pair.of(new FloatVector3(522, 69, 562), new FloatVector3(522, 69, 568)), + Pair.of(new FloatVector3(522, 69, 568), new FloatVector3(550, 69, 568)), + Pair.of(new FloatVector3(550, 69, 568), new FloatVector3(550, 69, 562)), + Pair.of(new FloatVector3(550, 69, 562), new FloatVector3(551, 69, 562)), + Pair.of(new FloatVector3(551, 69, 562), new FloatVector3(551, 69, 551)), + Pair.of(new FloatVector3(551, 69, 551), new FloatVector3(550, 69, 551)), + Pair.of(new FloatVector3(550, 69, 551), new FloatVector3(550, 69, 544)), + Pair.of(new FloatVector3(550, 69, 544), new FloatVector3(525, 69, 544)), + Pair.of(new FloatVector3(525, 69, 544), new FloatVector3(525, 69, 483)), + Pair.of(new FloatVector3(525, 69, 483), new FloatVector3(455, 69, 483)) + ); + } + + @Override + public List> gangwarFacades() { + return List.of( + Pair.of(new FloatVector3(405, 69, 433), new FloatVector3(405, 69, 612)), + Pair.of(new FloatVector3(405, 69, 612), new FloatVector3(472, 69, 612)), + Pair.of(new FloatVector3(472, 69, 612), new FloatVector3(472, 69, 618)), + Pair.of(new FloatVector3(472, 69, 618), new FloatVector3(600, 69, 618)), + Pair.of(new FloatVector3(600, 69, 618), new FloatVector3(600, 69, 612)), + Pair.of(new FloatVector3(600, 69, 612), new FloatVector3(601, 69, 612)), + Pair.of(new FloatVector3(601, 69, 612), new FloatVector3(601, 69, 500)), + Pair.of(new FloatVector3(601, 69, 500), new FloatVector3(600, 69, 500)), + Pair.of(new FloatVector3(600, 69, 500), new FloatVector3(600, 69, 494)), + Pair.of(new FloatVector3(600, 69, 494), new FloatVector3(575, 69, 494)), + Pair.of(new FloatVector3(575, 69, 494), new FloatVector3(575, 69, 433)), + Pair.of(new FloatVector3(575, 69, 433), new FloatVector3(405, 69, 433)) + ); + } +} diff --git a/core/src/main/java/com/rettichlp/unicacityaddon/base/gangzones/Hafen.java b/core/src/main/java/com/rettichlp/unicacityaddon/base/gangzones/Hafen.java new file mode 100644 index 000000000..acc4cb5d1 --- /dev/null +++ b/core/src/main/java/com/rettichlp/unicacityaddon/base/gangzones/Hafen.java @@ -0,0 +1,39 @@ +package com.rettichlp.unicacityaddon.base.gangzones; + +import com.rettichlp.unicacityaddon.UnicacityAddon; +import com.rettichlp.unicacityaddon.base.registry.annotation.UCGangzone; +import net.labymod.api.util.Pair; +import net.labymod.api.util.math.vector.FloatVector3; + +import java.util.List; + +/** + * @author RettichLP + */ +@UCGangzone +public class Hafen extends AbstractAttackableGangzone { + + public Hafen(UnicacityAddon unicacityAddon, UCGangzone ucGangzone) { + super(unicacityAddon, ucGangzone); + } + + @Override + public List> gangzoneFacades() { + return List.of( + Pair.of(new FloatVector3(-423, 69, 2), new FloatVector3(-423, 69, 177)), + Pair.of(new FloatVector3(-423, 69, 177), new FloatVector3(-322, 69, 177)), + Pair.of(new FloatVector3(-322, 69, 177), new FloatVector3(-322, 69, 2)), + Pair.of(new FloatVector3(-322, 69, 2), new FloatVector3(-423, 69, 2)) + ); + } + + @Override + public List> gangwarFacades() { + return List.of( + Pair.of(new FloatVector3(-473, 69, -48), new FloatVector3(-473, 69, 227)), + Pair.of(new FloatVector3(-473, 69, 227), new FloatVector3(-272, 69, 227)), + Pair.of(new FloatVector3(-272, 69, 227), new FloatVector3(-272, 69, -48)), + Pair.of(new FloatVector3(-272, 69, -48), new FloatVector3(-473, 69, -48)) + ); + } +} diff --git a/core/src/main/java/com/rettichlp/unicacityaddon/base/gangzones/Kerzakov.java b/core/src/main/java/com/rettichlp/unicacityaddon/base/gangzones/Kerzakov.java new file mode 100644 index 000000000..2cd48c8b4 --- /dev/null +++ b/core/src/main/java/com/rettichlp/unicacityaddon/base/gangzones/Kerzakov.java @@ -0,0 +1,30 @@ +package com.rettichlp.unicacityaddon.base.gangzones; + +import com.rettichlp.unicacityaddon.UnicacityAddon; +import com.rettichlp.unicacityaddon.base.enums.faction.Faction; +import com.rettichlp.unicacityaddon.base.registry.annotation.UCGangzone; +import net.labymod.api.util.Pair; +import net.labymod.api.util.math.vector.FloatVector3; + +import java.util.List; + +/** + * @author RettichLP + */ +@UCGangzone(owner = Faction.KERZAKOV) +public class Kerzakov extends AbstractGangzone { + + public Kerzakov(UnicacityAddon unicacityAddon, UCGangzone ucGangzone) { + super(unicacityAddon, ucGangzone); + } + + @Override + public List> gangzoneFacades() { + return List.of( + Pair.of(new FloatVector3(863, 69, 160), new FloatVector3(863, 69, 239)), + Pair.of(new FloatVector3(863, 69, 239), new FloatVector3(956, 69, 239)), + Pair.of(new FloatVector3(956, 69, 239), new FloatVector3(956, 69, 160)), + Pair.of(new FloatVector3(956, 69, 160), new FloatVector3(863, 69, 160)) + ); + } +} diff --git a/core/src/main/java/com/rettichlp/unicacityaddon/base/gangzones/LaCosaNostra.java b/core/src/main/java/com/rettichlp/unicacityaddon/base/gangzones/LaCosaNostra.java new file mode 100644 index 000000000..a53853aaa --- /dev/null +++ b/core/src/main/java/com/rettichlp/unicacityaddon/base/gangzones/LaCosaNostra.java @@ -0,0 +1,32 @@ +package com.rettichlp.unicacityaddon.base.gangzones; + +import com.rettichlp.unicacityaddon.UnicacityAddon; +import com.rettichlp.unicacityaddon.base.enums.faction.Faction; +import com.rettichlp.unicacityaddon.base.registry.annotation.UCGangzone; +import net.labymod.api.util.Pair; +import net.labymod.api.util.math.vector.FloatVector3; + +import java.util.List; + +/** + * @author RettichLP + */ +@UCGangzone(owner = Faction.LACOSANOSTRA) +public class LaCosaNostra extends AbstractGangzone { + + public LaCosaNostra(UnicacityAddon unicacityAddon, UCGangzone ucGangzone) { + super(unicacityAddon, ucGangzone); + } + + @Override + public List> gangzoneFacades() { + return List.of( + Pair.of(new FloatVector3(-56, 69, -478), new FloatVector3(-56, 69, -427)), + Pair.of(new FloatVector3(-56, 69, -427), new FloatVector3(47, 69, -427)), + Pair.of(new FloatVector3(47, 69, -427), new FloatVector3(47, 69, -509)), + Pair.of(new FloatVector3(47, 69, -509), new FloatVector3(-35, 69, -509)), + Pair.of(new FloatVector3(-35, 69, -509), new FloatVector3(-35, 69, -478)), + Pair.of(new FloatVector3(-35, 69, -478), new FloatVector3(-56, 69, -478)) + ); + } +} diff --git a/core/src/main/java/com/rettichlp/unicacityaddon/base/gangzones/LeMilieu.java b/core/src/main/java/com/rettichlp/unicacityaddon/base/gangzones/LeMilieu.java new file mode 100644 index 000000000..e10045f2a --- /dev/null +++ b/core/src/main/java/com/rettichlp/unicacityaddon/base/gangzones/LeMilieu.java @@ -0,0 +1,30 @@ +package com.rettichlp.unicacityaddon.base.gangzones; + +import com.rettichlp.unicacityaddon.UnicacityAddon; +import com.rettichlp.unicacityaddon.base.enums.faction.Faction; +import com.rettichlp.unicacityaddon.base.registry.annotation.UCGangzone; +import net.labymod.api.util.Pair; +import net.labymod.api.util.math.vector.FloatVector3; + +import java.util.List; + +/** + * @author RettichLP + */ +@UCGangzone(owner = Faction.LEMILIEU) +public class LeMilieu extends AbstractGangzone { + + public LeMilieu(UnicacityAddon unicacityAddon, UCGangzone ucGangzone) { + super(unicacityAddon, ucGangzone); + } + + @Override + public List> gangzoneFacades() { + return List.of( + Pair.of(new FloatVector3(262, 69, -313), new FloatVector3(262, 69, -219)), + Pair.of(new FloatVector3(262, 69, -219), new FloatVector3(337, 69, -219)), + Pair.of(new FloatVector3(337, 69, -219), new FloatVector3(337, 69, -313)), + Pair.of(new FloatVector3(337, 69, -313), new FloatVector3(262, 69, -313)) + ); + } +} diff --git a/core/src/main/java/com/rettichlp/unicacityaddon/base/gangzones/Obrien.java b/core/src/main/java/com/rettichlp/unicacityaddon/base/gangzones/Obrien.java new file mode 100644 index 000000000..5665ca513 --- /dev/null +++ b/core/src/main/java/com/rettichlp/unicacityaddon/base/gangzones/Obrien.java @@ -0,0 +1,30 @@ +package com.rettichlp.unicacityaddon.base.gangzones; + +import com.rettichlp.unicacityaddon.UnicacityAddon; +import com.rettichlp.unicacityaddon.base.enums.faction.Faction; +import com.rettichlp.unicacityaddon.base.registry.annotation.UCGangzone; +import net.labymod.api.util.Pair; +import net.labymod.api.util.math.vector.FloatVector3; + +import java.util.List; + +/** + * @author RettichLP + */ +@UCGangzone(owner = Faction.OBRIEN) +public class Obrien extends AbstractGangzone { + + public Obrien(UnicacityAddon unicacityAddon, UCGangzone ucGangzone) { + super(unicacityAddon, ucGangzone); + } + + @Override + public List> gangzoneFacades() { + return List.of( + Pair.of(new FloatVector3(687, 69, 490), new FloatVector3(687, 69, 593)), + Pair.of(new FloatVector3(687, 69, 593), new FloatVector3(761, 69, 593)), + Pair.of(new FloatVector3(761, 69, 593), new FloatVector3(761, 69, 490)), + Pair.of(new FloatVector3(761, 69, 490), new FloatVector3(687, 69, 490)) + ); + } +} diff --git a/core/src/main/java/com/rettichlp/unicacityaddon/base/gangzones/Plattenbau.java b/core/src/main/java/com/rettichlp/unicacityaddon/base/gangzones/Plattenbau.java new file mode 100644 index 000000000..628a0acf9 --- /dev/null +++ b/core/src/main/java/com/rettichlp/unicacityaddon/base/gangzones/Plattenbau.java @@ -0,0 +1,61 @@ +package com.rettichlp.unicacityaddon.base.gangzones; + +import com.rettichlp.unicacityaddon.UnicacityAddon; +import com.rettichlp.unicacityaddon.base.registry.annotation.UCGangzone; +import net.labymod.api.util.Pair; +import net.labymod.api.util.math.vector.FloatVector3; + +import java.util.List; + +/** + * @author RettichLP + */ +@UCGangzone +public class Plattenbau extends AbstractAttackableGangzone { + + public Plattenbau(UnicacityAddon unicacityAddon, UCGangzone ucGangzone) { + super(unicacityAddon, ucGangzone); + } + + @Override + public List> gangzoneFacades() { + return List.of( + Pair.of(new FloatVector3(-525, 69, 415), new FloatVector3(-525, 69, 447)), + Pair.of(new FloatVector3(-525, 69, 447), new FloatVector3(-510, 69, 447)), + Pair.of(new FloatVector3(-510, 69, 447), new FloatVector3(-510, 69, 439)), + Pair.of(new FloatVector3(-510, 69, 439), new FloatVector3(-486, 69, 439)), + Pair.of(new FloatVector3(-486, 69, 439), new FloatVector3(-486, 69, 429)), + Pair.of(new FloatVector3(-486, 69, 429), new FloatVector3(-411, 69, 429)), + Pair.of(new FloatVector3(-411, 69, 429), new FloatVector3(-411, 69, 392)), + Pair.of(new FloatVector3(-411, 69, 392), new FloatVector3(-418, 69, 392)), + Pair.of(new FloatVector3(-418, 69, 392), new FloatVector3(-418, 69, 378)), + Pair.of(new FloatVector3(-418, 69, 378), new FloatVector3(-480, 69, 378)), + Pair.of(new FloatVector3(-480, 69, 378), new FloatVector3(-480, 69, 413)), + Pair.of(new FloatVector3(-480, 69, 413), new FloatVector3(-486, 69, 413)), + Pair.of(new FloatVector3(-486, 69, 413), new FloatVector3(-486, 69, 406)), + Pair.of(new FloatVector3(-486, 69, 406), new FloatVector3(-496, 69, 406)), + Pair.of(new FloatVector3(-496, 69, 406), new FloatVector3(-496, 69, 415)), + Pair.of(new FloatVector3(-496, 69, 415), new FloatVector3(-525, 69, 415)) + ); + } + + @Override + public List> gangwarFacades() { + return List.of( + Pair.of(new FloatVector3(-575, 69, 365), new FloatVector3(-575, 69, 497)), + Pair.of(new FloatVector3(-575, 69, 497), new FloatVector3(-460, 69, 497)), + Pair.of(new FloatVector3(-460, 69, 497), new FloatVector3(-460, 69, 489)), + Pair.of(new FloatVector3(-460, 69, 489), new FloatVector3(-436, 69, 489)), + Pair.of(new FloatVector3(-436, 69, 489), new FloatVector3(-436, 69, 479)), + Pair.of(new FloatVector3(-436, 69, 479), new FloatVector3(-361, 69, 479)), + Pair.of(new FloatVector3(-361, 69, 479), new FloatVector3(-361, 69, 342)), + Pair.of(new FloatVector3(-361, 69, 342), new FloatVector3(-368, 69, 342)), + Pair.of(new FloatVector3(-368, 69, 342), new FloatVector3(-368, 69, 328)), + Pair.of(new FloatVector3(-368, 69, 328), new FloatVector3(-530, 69, 328)), + Pair.of(new FloatVector3(-530, 69, 328), new FloatVector3(-530, 69, 356)), + Pair.of(new FloatVector3(-530, 69, 356), new FloatVector3(-546, 69, 356)), + Pair.of(new FloatVector3(-546, 69, 356), new FloatVector3(-546, 69, 365)), + Pair.of(new FloatVector3(-546, 69, 365), new FloatVector3(-575, 69, 365)) + ); + } +} diff --git a/core/src/main/java/com/rettichlp/unicacityaddon/base/gangzones/Rotlicht.java b/core/src/main/java/com/rettichlp/unicacityaddon/base/gangzones/Rotlicht.java new file mode 100644 index 000000000..98366088c --- /dev/null +++ b/core/src/main/java/com/rettichlp/unicacityaddon/base/gangzones/Rotlicht.java @@ -0,0 +1,55 @@ +package com.rettichlp.unicacityaddon.base.gangzones; + +import com.rettichlp.unicacityaddon.UnicacityAddon; +import com.rettichlp.unicacityaddon.base.registry.annotation.UCGangzone; +import net.labymod.api.util.Pair; +import net.labymod.api.util.math.vector.FloatVector3; + +import java.util.List; + +/** + * @author RettichLP + */ +@UCGangzone +public class Rotlicht extends AbstractAttackableGangzone { + + public Rotlicht(UnicacityAddon unicacityAddon, UCGangzone ucGangzone) { + super(unicacityAddon, ucGangzone); + } + + @Override + public List> gangzoneFacades() { + return List.of( + Pair.of(new FloatVector3(691, 69, -29), new FloatVector3(691, 69, 60)), + Pair.of(new FloatVector3(691, 69, 60), new FloatVector3(763, 69, 60)), + Pair.of(new FloatVector3(763, 69, 60), new FloatVector3(763, 69, 58)), + Pair.of(new FloatVector3(763, 69, 58), new FloatVector3(764, 69, 58)), + Pair.of(new FloatVector3(764, 69, 58), new FloatVector3(764, 69, 56)), + Pair.of(new FloatVector3(764, 69, 56), new FloatVector3(765, 69, 56)), + Pair.of(new FloatVector3(765, 69, 56), new FloatVector3(765, 69, 55)), + Pair.of(new FloatVector3(765, 69, 55), new FloatVector3(767, 69, 55)), + Pair.of(new FloatVector3(767, 69, 55), new FloatVector3(767, 69, 54)), + Pair.of(new FloatVector3(767, 69, 54), new FloatVector3(807, 69, 54)), + Pair.of(new FloatVector3(807, 69, 54), new FloatVector3(807, 69, -29)), + Pair.of(new FloatVector3(807, 69, -29), new FloatVector3(691, 69, -29)) + ); + } + + @Override + public List> gangwarFacades() { + return List.of( + Pair.of(new FloatVector3(641, 69, -79), new FloatVector3(641, 69, 110)), + Pair.of(new FloatVector3(641, 69, 110), new FloatVector3(813, 69, 110)), + Pair.of(new FloatVector3(813, 69, 110), new FloatVector3(813, 69, 108)), + Pair.of(new FloatVector3(813, 69, 108), new FloatVector3(814, 69, 108)), + Pair.of(new FloatVector3(814, 69, 108), new FloatVector3(814, 69, 106)), + Pair.of(new FloatVector3(814, 69, 106), new FloatVector3(815, 69, 106)), + Pair.of(new FloatVector3(815, 69, 106), new FloatVector3(815, 69, 105)), + Pair.of(new FloatVector3(815, 69, 105), new FloatVector3(817, 69, 105)), + Pair.of(new FloatVector3(817, 69, 105), new FloatVector3(817, 69, 104)), + Pair.of(new FloatVector3(817, 69, 104), new FloatVector3(857, 69, 104)), + Pair.of(new FloatVector3(857, 69, 104), new FloatVector3(857, 69, -79)), + Pair.of(new FloatVector3(857, 69, -79), new FloatVector3(641, 69, -79)) + ); + } +} diff --git a/core/src/main/java/com/rettichlp/unicacityaddon/base/gangzones/Westsideballas.java b/core/src/main/java/com/rettichlp/unicacityaddon/base/gangzones/Westsideballas.java new file mode 100644 index 000000000..74495a038 --- /dev/null +++ b/core/src/main/java/com/rettichlp/unicacityaddon/base/gangzones/Westsideballas.java @@ -0,0 +1,30 @@ +package com.rettichlp.unicacityaddon.base.gangzones; + +import com.rettichlp.unicacityaddon.UnicacityAddon; +import com.rettichlp.unicacityaddon.base.enums.faction.Faction; +import com.rettichlp.unicacityaddon.base.registry.annotation.UCGangzone; +import net.labymod.api.util.Pair; +import net.labymod.api.util.math.vector.FloatVector3; + +import java.util.List; + +/** + * @author RettichLP + */ +@UCGangzone(owner = Faction.WESTSIDEBALLAS) +public class Westsideballas extends AbstractGangzone { + + public Westsideballas(UnicacityAddon unicacityAddon, UCGangzone ucGangzone) { + super(unicacityAddon, ucGangzone); + } + + @Override + public List> gangzoneFacades() { + return List.of( + Pair.of(new FloatVector3(-199, 69, 142), new FloatVector3(-199, 69, 272)), + Pair.of(new FloatVector3(-199, 69, 272), new FloatVector3(-121, 69, 272)), + Pair.of(new FloatVector3(-121, 69, 272), new FloatVector3(-121, 69, 142)), + Pair.of(new FloatVector3(-121, 69, 142), new FloatVector3(-199, 69, 142)) + ); + } +} diff --git a/core/src/main/java/com/rettichlp/unicacityaddon/base/gangzones/Yachthafen.java b/core/src/main/java/com/rettichlp/unicacityaddon/base/gangzones/Yachthafen.java new file mode 100644 index 000000000..1307b04e5 --- /dev/null +++ b/core/src/main/java/com/rettichlp/unicacityaddon/base/gangzones/Yachthafen.java @@ -0,0 +1,39 @@ +package com.rettichlp.unicacityaddon.base.gangzones; + +import com.rettichlp.unicacityaddon.UnicacityAddon; +import com.rettichlp.unicacityaddon.base.registry.annotation.UCGangzone; +import net.labymod.api.util.Pair; +import net.labymod.api.util.math.vector.FloatVector3; + +import java.util.List; + +/** + * @author RettichLP + */ +@UCGangzone +public class Yachthafen extends AbstractAttackableGangzone { + + public Yachthafen(UnicacityAddon unicacityAddon, UCGangzone ucGangzone) { + super(unicacityAddon, ucGangzone); + } + + @Override + public List> gangzoneFacades() { + return List.of( + Pair.of(new FloatVector3(236, 69, -551), new FloatVector3(236, 69, -495)), + Pair.of(new FloatVector3(236, 69, -495), new FloatVector3(292, 69, -495)), + Pair.of(new FloatVector3(292, 69, -495), new FloatVector3(292, 69, -551)), + Pair.of(new FloatVector3(292, 69, -551), new FloatVector3(236, 69, -551)) + ); + } + + @Override + public List> gangwarFacades() { + return List.of( + Pair.of(new FloatVector3(186, 69, -601), new FloatVector3(186, 69, -445)), + Pair.of(new FloatVector3(186, 69, -445), new FloatVector3(342, 69, -445)), + Pair.of(new FloatVector3(342, 69, -445), new FloatVector3(342, 69, -601)), + Pair.of(new FloatVector3(342, 69, -601), new FloatVector3(186, 69, -601)) + ); + } +} diff --git a/core/src/main/java/com/rettichlp/unicacityaddon/base/registry/Registry.java b/core/src/main/java/com/rettichlp/unicacityaddon/base/registry/Registry.java index 89777febb..31a5fbad5 100644 --- a/core/src/main/java/com/rettichlp/unicacityaddon/base/registry/Registry.java +++ b/core/src/main/java/com/rettichlp/unicacityaddon/base/registry/Registry.java @@ -4,9 +4,23 @@ import com.rettichlp.unicacityaddon.UnicacityAddon; import com.rettichlp.unicacityaddon.badge.NoPushBadge; import com.rettichlp.unicacityaddon.badge.VipBadge; +import com.rettichlp.unicacityaddon.base.gangzones.AbstractGangzone; +import com.rettichlp.unicacityaddon.base.gangzones.Altstadt; +import com.rettichlp.unicacityaddon.base.gangzones.Farm; +import com.rettichlp.unicacityaddon.base.gangzones.Hafen; +import com.rettichlp.unicacityaddon.base.gangzones.Plattenbau; +import com.rettichlp.unicacityaddon.base.gangzones.Rotlicht; +import com.rettichlp.unicacityaddon.base.gangzones.Yachthafen; +import com.rettichlp.unicacityaddon.base.gangzones.Calderon; +import com.rettichlp.unicacityaddon.base.gangzones.Kerzakov; +import com.rettichlp.unicacityaddon.base.gangzones.LaCosaNostra; +import com.rettichlp.unicacityaddon.base.gangzones.LeMilieu; +import com.rettichlp.unicacityaddon.base.gangzones.Obrien; +import com.rettichlp.unicacityaddon.base.gangzones.Westsideballas; import com.rettichlp.unicacityaddon.base.registry.annotation.UCBadge; import com.rettichlp.unicacityaddon.base.registry.annotation.UCCommand; import com.rettichlp.unicacityaddon.base.registry.annotation.UCEvent; +import com.rettichlp.unicacityaddon.base.registry.annotation.UCGangzone; import com.rettichlp.unicacityaddon.base.registry.annotation.UCNameTag; import com.rettichlp.unicacityaddon.commands.ABuyCommand; import com.rettichlp.unicacityaddon.commands.ActivityCommand; @@ -200,6 +214,10 @@ public class Registry { @Getter private final Set commands = new HashSet<>(); + @Accessors(fluent = true) + @Getter + private final Set gangzones = new HashSet<>(); + private final HashSet> badgeList = Sets.newHashSet( NoPushBadge.class, VipBadge.class @@ -382,6 +400,21 @@ public class Registry { YasinCommand.class ); + private final HashSet> gangzoneList = Sets.newHashSet( + Altstadt.class, + Farm.class, + Hafen.class, + Plattenbau.class, + Rotlicht.class, + Yachthafen.class, + Calderon.class, + Kerzakov.class, + LaCosaNostra.class, + LeMilieu.class, + Obrien.class, + Westsideballas.class + ); + private final UnicacityAddon unicacityAddon; public Registry(UnicacityAddon unicacityAddon) { @@ -513,4 +546,33 @@ public void registerCommands() { }); this.unicacityAddon.logger().info("Registered {}/{} Commands, {} skipped (deactivated)", registeredCommandCount, commandClassSet.size() - deactivatedCommandCount.get(), deactivatedCommandCount.get()); } + + public void registerGangzones() { + AtomicInteger registeredGangzoneCount = new AtomicInteger(); + AtomicInteger deactivatedGangzoneCount = new AtomicInteger(); + Set> gangzoneClassSet = this.gangzoneList; + gangzoneClassSet.remove(UnicacityCommand.class); + gangzoneClassSet.stream() + .filter(gangzoneClass -> gangzoneClass.isAnnotationPresent(UCGangzone.class)) + .forEach(gangzoneClass -> { + UCGangzone ucGangzone = gangzoneClass.getAnnotation(UCGangzone.class); + if (ucGangzone.deactivated()) { + deactivatedGangzoneCount.getAndIncrement(); + } else { + try { + AbstractGangzone gangzone = (AbstractGangzone) gangzoneClass.getConstructor(UnicacityAddon.class, UCGangzone.class).newInstance(this.unicacityAddon, ucGangzone); + + Objects.requireNonNull(gangzone, "Gangzone"); + this.gangzones.add(gangzone); + + registeredGangzoneCount.getAndIncrement(); + } catch (InvocationTargetException | NoSuchMethodException | IllegalAccessException | + InstantiationException e) { + this.unicacityAddon.logger().warn("Can't register Gangzone: {}", gangzoneClass.getSimpleName()); + this.unicacityAddon.logger().error(e.getMessage()); + } + } + }); + this.unicacityAddon.logger().info("Registered {}/{} Gangzones, {} skipped (deactivated)", registeredGangzoneCount, gangzoneClassSet.size() - deactivatedGangzoneCount.get(), deactivatedGangzoneCount.get()); + } } diff --git a/core/src/main/java/com/rettichlp/unicacityaddon/base/registry/annotation/UCGangzone.java b/core/src/main/java/com/rettichlp/unicacityaddon/base/registry/annotation/UCGangzone.java new file mode 100644 index 000000000..7d03fc848 --- /dev/null +++ b/core/src/main/java/com/rettichlp/unicacityaddon/base/registry/annotation/UCGangzone.java @@ -0,0 +1,20 @@ +package com.rettichlp.unicacityaddon.base.registry.annotation; + +import com.rettichlp.unicacityaddon.base.enums.faction.Faction; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * @author RettichLP + */ +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +public @interface UCGangzone { + + Faction owner() default Faction.NULL; + + boolean deactivated() default false; +} \ No newline at end of file diff --git a/core/src/main/java/com/rettichlp/unicacityaddon/base/services/NavigationService.java b/core/src/main/java/com/rettichlp/unicacityaddon/base/services/NavigationService.java index d5e1900ec..dc62b8df5 100644 --- a/core/src/main/java/com/rettichlp/unicacityaddon/base/services/NavigationService.java +++ b/core/src/main/java/com/rettichlp/unicacityaddon/base/services/NavigationService.java @@ -55,6 +55,10 @@ public Map.Entry getNearestNaviPoint(FloatVector3 location) { return !naviPoints.isEmpty() ? getNearest(location, naviPoints, NaviPoint::getLocation) : Maps.immutableEntry(0D, new NaviPoint("Unbekannt", 0, 0, 0, "")); } + public Map.Entry getNearestFloatVector3(FloatVector3 location, Collection elements) { + return getNearest(location, elements, o -> o); + } + public Map.Entry getNearest(FloatVector3 location, T[] elements, Function locationExtractor) { return getNearest(location, List.of(elements), locationExtractor); } diff --git a/core/src/main/java/com/rettichlp/unicacityaddon/base/text/ColorCode.java b/core/src/main/java/com/rettichlp/unicacityaddon/base/text/ColorCode.java index 81c73aaa2..02ba3c75a 100644 --- a/core/src/main/java/com/rettichlp/unicacityaddon/base/text/ColorCode.java +++ b/core/src/main/java/com/rettichlp/unicacityaddon/base/text/ColorCode.java @@ -34,4 +34,8 @@ public enum ColorCode { private final String code; private final TextColor textColor; private final Color color; + + public net.labymod.api.util.Color getLabymodColor() { + return net.labymod.api.util.Color.of(this.color.getRGB()); + } } \ No newline at end of file diff --git a/core/src/main/java/com/rettichlp/unicacityaddon/controller/RenderController.java b/core/src/main/java/com/rettichlp/unicacityaddon/controller/RenderController.java new file mode 100644 index 000000000..335272b1a --- /dev/null +++ b/core/src/main/java/com/rettichlp/unicacityaddon/controller/RenderController.java @@ -0,0 +1,18 @@ +package com.rettichlp.unicacityaddon.controller; + +import net.labymod.api.reference.annotation.Referenceable; +import net.labymod.api.util.Color; +import net.labymod.api.util.math.vector.FloatVector3; +import org.jetbrains.annotations.Nullable; + +/** + * @author RettichLP + */ +@Nullable +@Referenceable +public abstract class RenderController { + + public abstract void drawFacade(FloatVector3 first, FloatVector3 second, Color c); + + public abstract void drawOutline(FloatVector3 first, FloatVector3 second, Color c); +} diff --git a/core/src/main/java/com/rettichlp/unicacityaddon/listener/ScreenRenderListener.java b/core/src/main/java/com/rettichlp/unicacityaddon/listener/ScreenRenderListener.java index 7c4c4b8ef..8679eb2fb 100644 --- a/core/src/main/java/com/rettichlp/unicacityaddon/listener/ScreenRenderListener.java +++ b/core/src/main/java/com/rettichlp/unicacityaddon/listener/ScreenRenderListener.java @@ -2,16 +2,28 @@ import com.rettichlp.unicacityaddon.UnicacityAddon; import com.rettichlp.unicacityaddon.base.enums.Weapon; +import com.rettichlp.unicacityaddon.base.events.HotkeyEvent; import com.rettichlp.unicacityaddon.base.events.UnicacityAddonTickEvent; +import com.rettichlp.unicacityaddon.base.gangzones.AbstractAttackableGangzone; +import com.rettichlp.unicacityaddon.base.gangzones.AbstractGangzone; import com.rettichlp.unicacityaddon.base.registry.annotation.UCEvent; import com.rettichlp.unicacityaddon.commands.GetGunPatternCommand; +import net.labymod.api.client.gui.screen.key.Key; import net.labymod.api.client.world.item.ItemStack; import net.labymod.api.event.Subscribe; import net.labymod.api.event.client.render.ScreenRenderEvent; +import net.labymod.api.event.client.render.world.RenderWorldEvent; import net.labymod.api.event.client.world.ItemStackTooltipEvent; +import net.labymod.api.util.Color; +import net.labymod.api.util.Pair; +import net.labymod.api.util.math.vector.FloatVector3; import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.Objects; import java.util.concurrent.TimeUnit; /** @@ -22,6 +34,7 @@ public class ScreenRenderListener { public static int lastHoveredSlotNumber = -1; public static List settingPath = new ArrayList<>(); + private boolean showGangzones = false; private final UnicacityAddon unicacityAddon; @@ -49,6 +62,29 @@ public void onScreenRender(ScreenRenderEvent e) { } } + /** + * Quote: "Ohhhh ein Slime Daddy!" - Liiluu, 04.09.2023 + */ + @Subscribe + public void onRenderWorld(RenderWorldEvent e) { + if (this.unicacityAddon.utilService().isUnicacity() && this.showGangzones) { + boolean activeGangwarMode = this.unicacityAddon.player().hasGangwar(); + + this.getNearestGangzone(activeGangwarMode).forEach(gangzone -> { + if (gangzone != null) { + if (gangzone instanceof AbstractAttackableGangzone attackableGangzone && activeGangwarMode) { + attackableGangzone.renderGangwarFacades(); + attackableGangzone.renderGangwarOutline(); + attackableGangzone.renderGangzoneOutline(Color.ORANGE); + } else { + gangzone.renderGangzoneFacades(); + gangzone.renderGangzoneOutline(Color.BLACK); + } + } + }); + } + } + @Subscribe public void onItemStackTooltip(ItemStackTooltipEvent e) { ItemStack itemStack = e.itemStack(); @@ -61,4 +97,41 @@ public void onUnicacityAddonTick(UnicacityAddonTickEvent e) { this.unicacityAddon.deadBodyController().updateDisplayName(this.unicacityAddon); } } + + @Subscribe + public void onHotkey(HotkeyEvent e) { + Key key = e.getKey(); + + if (key.equals(this.unicacityAddon.configuration().hotkey().showGangzones().get()) && e.isRealIngame()) { + this.showGangzones = !this.showGangzones; + } + } + + private List getNearestGangzone(boolean activeGangwarMode) { + Map gangzoneDistanceMap = new HashMap<>(); + + for (AbstractGangzone gangzone : this.unicacityAddon.registry().gangzones()) { + + List> gangzoneFacades = new ArrayList<>(); + if (gangzone instanceof AbstractAttackableGangzone attackableGangzone && activeGangwarMode) { + gangzoneFacades.addAll(attackableGangzone.gangzoneFacades()); + gangzoneFacades.addAll(attackableGangzone.gangwarFacades()); + } else { + gangzoneFacades.addAll(gangzone.gangzoneFacades()); + } + + Collection gangzoneCorners = gangzoneFacades.stream() + .map(Pair::getFirst) + .filter(Objects::nonNull) + .toList(); + + Map.Entry floatVector3DistanceMapEntry = this.unicacityAddon.navigationService().getNearestFloatVector3(this.unicacityAddon.player().getLocation(), gangzoneCorners); + gangzoneDistanceMap.put(gangzone, floatVector3DistanceMapEntry.getKey()); + } + + return gangzoneDistanceMap.entrySet().stream() + .sorted(Map.Entry.comparingByValue()) + .map(Map.Entry::getKey) + .toList().subList(0, 2); + } } \ No newline at end of file diff --git a/core/src/main/resources/assets/unicacityaddon/i18n/de_de.json b/core/src/main/resources/assets/unicacityaddon/i18n/de_de.json index ce040a42e..f6bc6b7e6 100644 --- a/core/src/main/resources/assets/unicacityaddon/i18n/de_de.json +++ b/core/src/main/resources/assets/unicacityaddon/i18n/de_de.json @@ -112,6 +112,10 @@ "screenshot": { "name": "Screenshot mit Upload zu Imgur", "description": "Erstellt einen Screenshot, lädt ihn auf Imgur hoch und kopiert den Link in die Zwischenablage" + }, + "showGangzones": { + "name": "Gangzones", + "description": "Zeigt die Begrenzungen von Gangzones und bei einem Gangwar das Kampfgebiet an" } }, "nametag": { @@ -576,6 +580,10 @@ "name": "Debug", "description": "Zeigt Debug Nachrichten an" }, + "gangwar": { + "name": "Gangwar Modus", + "description": "Simuliert den Gangwar Modus" + }, "local": { "name": "Lokale API Verbindung", "description": "Verbindet das Addon mit einer lokalen API Instanz (localhost)" diff --git a/core/src/main/resources/assets/unicacityaddon/i18n/en_gb.json b/core/src/main/resources/assets/unicacityaddon/i18n/en_gb.json index 8393d23f5..23d9e9339 100644 --- a/core/src/main/resources/assets/unicacityaddon/i18n/en_gb.json +++ b/core/src/main/resources/assets/unicacityaddon/i18n/en_gb.json @@ -112,6 +112,10 @@ "screenshot": { "name": "Screenshot with upload to Imgur", "description": "Creates a screenshot, uploads it to Imgur, and copies the link to the clipboard" + }, + "showGangzones": { + "name": "Gangzones", + "description": "Shows gangzone borders and the fight zone during a gangwar" } }, "nametag": { @@ -576,6 +580,10 @@ "name": "Debug", "description": "Displays debug messages" }, + "gangwar": { + "name": "Gangwar Mode", + "description": "Simulates the gangwar mode" + }, "local": { "name": "Local API connection", "description": "Connects the addon to a local API instance (localhost)" diff --git a/core/src/main/resources/assets/unicacityaddon/i18n/en_us.json b/core/src/main/resources/assets/unicacityaddon/i18n/en_us.json index 8393d23f5..23d9e9339 100644 --- a/core/src/main/resources/assets/unicacityaddon/i18n/en_us.json +++ b/core/src/main/resources/assets/unicacityaddon/i18n/en_us.json @@ -112,6 +112,10 @@ "screenshot": { "name": "Screenshot with upload to Imgur", "description": "Creates a screenshot, uploads it to Imgur, and copies the link to the clipboard" + }, + "showGangzones": { + "name": "Gangzones", + "description": "Shows gangzone borders and the fight zone during a gangwar" } }, "nametag": { @@ -576,6 +580,10 @@ "name": "Debug", "description": "Displays debug messages" }, + "gangwar": { + "name": "Gangwar Mode", + "description": "Simulates the gangwar mode" + }, "local": { "name": "Local API connection", "description": "Connects the addon to a local API instance (localhost)" diff --git a/game-runner/src/v1_12_2/java/com/rettichlp/unicacityaddon/v1_12_2/VersionedRenderController.java b/game-runner/src/v1_12_2/java/com/rettichlp/unicacityaddon/v1_12_2/VersionedRenderController.java new file mode 100644 index 000000000..0bc5c8e59 --- /dev/null +++ b/game-runner/src/v1_12_2/java/com/rettichlp/unicacityaddon/v1_12_2/VersionedRenderController.java @@ -0,0 +1,224 @@ +package com.rettichlp.unicacityaddon.v1_12_2; + +import com.rettichlp.unicacityaddon.controller.RenderController; +import net.labymod.api.models.Implements; +import net.labymod.api.util.Color; +import net.labymod.api.util.math.vector.FloatVector3; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.util.math.AxisAlignedBB; + +import javax.inject.Singleton; + +import static net.minecraft.client.renderer.vertex.DefaultVertexFormats.POSITION; +import static net.minecraft.client.renderer.vertex.DefaultVertexFormats.POSITION_TEX; +import static org.lwjgl.opengl.GL11.*; + +@Singleton +@Implements(RenderController.class) +public class VersionedRenderController extends RenderController { + + @Override + public void drawFacade(FloatVector3 first, FloatVector3 second, Color c) { + // length of facade + double length; + + if (first.getX() == second.getX()) { // modify z + // lower location + FloatVector3 lower = first.getZ() <= second.getZ() ? first : second; + + double x = lower.getX() - Minecraft.getMinecraft().getRenderManager().viewerPosX; + double y = 0 - Minecraft.getMinecraft().getRenderManager().viewerPosY; + double z = lower.getZ() - Minecraft.getMinecraft().getRenderManager().viewerPosZ; + + // length + length = Math.abs(first.getZ() - second.getZ()); + + // draw + glPushMatrix(); + gl(c.withAlpha(0.12f), () -> { + drawColorBox(new AxisAlignedBB(x, y, z, x, y + 100, z + length), 0F, 0F, 0F, 0F); + glColor4d(0, 0, 0, 0.5); + }); + glPopMatrix(); + } else if (first.getZ() == second.getZ()) { // modify x + // lower location + FloatVector3 lower = first.getX() <= second.getX() ? first : second; + + double x = lower.getX() - Minecraft.getMinecraft().getRenderManager().viewerPosX; + double y = 0 - Minecraft.getMinecraft().getRenderManager().viewerPosY; + double z = lower.getZ() - Minecraft.getMinecraft().getRenderManager().viewerPosZ; + + // length + length = Math.abs(first.getX() - second.getX()); + + // draw + glPushMatrix(); + gl(c.withAlpha(0.12f), () -> { + drawColorBox(new AxisAlignedBB(x, y, z, x + length, y + 100, z), 0F, 0F, 0F, 0F); + glColor4d(0, 0, 0, 0.5); + }); + glPopMatrix(); + } else { + throw new IllegalArgumentException("Positions are not in a row: " + first + " and " + second); + } + } + + @Override + public void drawOutline(FloatVector3 first, FloatVector3 second, Color c) { + // length of facade + double length; + + if (first.getX() == second.getX()) { // modify z + // lower location + FloatVector3 lower = first.getZ() <= second.getZ() ? first : second; + + double x = lower.getX() - Minecraft.getMinecraft().getRenderManager().viewerPosX; + double y = 0 - Minecraft.getMinecraft().getRenderManager().viewerPosY; + double z = lower.getZ() - Minecraft.getMinecraft().getRenderManager().viewerPosZ; + + // length + length = Math.abs(first.getZ() - second.getZ()); + + // draw + glPushMatrix(); + gl(c.withAlpha(0.12f), () -> { + drawSelectionBoundingBox(new AxisAlignedBB(x, y, z, x, y + 100, z + length)); + glLineWidth(2.0F); + }); + glPopMatrix(); + } else if (first.getZ() == second.getZ()) { // modify x + // lower location + FloatVector3 lower = first.getX() <= second.getX() ? first : second; + + double x = lower.getX() - Minecraft.getMinecraft().getRenderManager().viewerPosX; + double y = 0 - Minecraft.getMinecraft().getRenderManager().viewerPosY; + double z = lower.getZ() - Minecraft.getMinecraft().getRenderManager().viewerPosZ; + + // length + length = Math.abs(first.getX() - second.getX()); + + // draw + glPushMatrix(); + gl(c.withAlpha(0.12f), () -> { + drawSelectionBoundingBox(new AxisAlignedBB(x, y, z, x + length, y + 100, z)); + glLineWidth(2.0F); + }); + glPopMatrix(); + } else { + throw new IllegalArgumentException("Positions are not in a row: " + first + " and " + second); + } + } + + private void gl(Color c, Runnable runnable) { + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glEnable(GL_BLEND); + glLineWidth(2.0F); + glDisable(GL_TEXTURE_2D); +// glDisable(GL_DEPTH_TEST); + glDepthMask(false); + glColor4f(c.getRed() / 255f, c.getGreen() / 255f, c.getBlue() / 255f, c.getAlpha() / 255f); + + runnable.run(); + + glEnable(GL_TEXTURE_2D); +// glEnable(GL_DEPTH_TEST); + glDepthMask(true); + glDisable(GL_BLEND); + } + + private void drawColorBox(AxisAlignedBB axisalignedbb, float red, float green, float blue, float alpha) { + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferBuilder = tessellator.getBuffer(); + bufferBuilder.begin(7, POSITION_TEX);// Starts X. + bufferBuilder.pos(axisalignedbb.minX, axisalignedbb.minY, axisalignedbb.minZ).color(red, green, blue, alpha).endVertex(); + bufferBuilder.pos(axisalignedbb.minX, axisalignedbb.maxY, axisalignedbb.minZ).color(red, green, blue, alpha).endVertex(); + bufferBuilder.pos(axisalignedbb.maxX, axisalignedbb.minY, axisalignedbb.minZ).color(red, green, blue, alpha).endVertex(); + bufferBuilder.pos(axisalignedbb.maxX, axisalignedbb.maxY, axisalignedbb.minZ).color(red, green, blue, alpha).endVertex(); + bufferBuilder.pos(axisalignedbb.maxX, axisalignedbb.minY, axisalignedbb.maxZ).color(red, green, blue, alpha).endVertex(); + bufferBuilder.pos(axisalignedbb.maxX, axisalignedbb.maxY, axisalignedbb.maxZ).color(red, green, blue, alpha).endVertex(); + bufferBuilder.pos(axisalignedbb.minX, axisalignedbb.minY, axisalignedbb.maxZ).color(red, green, blue, alpha).endVertex(); + bufferBuilder.pos(axisalignedbb.minX, axisalignedbb.maxY, axisalignedbb.maxZ).color(red, green, blue, alpha).endVertex(); + tessellator.draw(); + bufferBuilder.begin(7, POSITION_TEX); + bufferBuilder.pos(axisalignedbb.maxX, axisalignedbb.maxY, axisalignedbb.minZ).color(red, green, blue, alpha).endVertex(); + bufferBuilder.pos(axisalignedbb.maxX, axisalignedbb.minY, axisalignedbb.minZ).color(red, green, blue, alpha).endVertex(); + bufferBuilder.pos(axisalignedbb.minX, axisalignedbb.maxY, axisalignedbb.minZ).color(red, green, blue, alpha).endVertex(); + bufferBuilder.pos(axisalignedbb.minX, axisalignedbb.minY, axisalignedbb.minZ).color(red, green, blue, alpha).endVertex(); + bufferBuilder.pos(axisalignedbb.minX, axisalignedbb.maxY, axisalignedbb.maxZ).color(red, green, blue, alpha).endVertex(); + bufferBuilder.pos(axisalignedbb.minX, axisalignedbb.minY, axisalignedbb.maxZ).color(red, green, blue, alpha).endVertex(); + bufferBuilder.pos(axisalignedbb.maxX, axisalignedbb.maxY, axisalignedbb.maxZ).color(red, green, blue, alpha).endVertex(); + bufferBuilder.pos(axisalignedbb.maxX, axisalignedbb.minY, axisalignedbb.maxZ).color(red, green, blue, alpha).endVertex(); + tessellator.draw();// Ends X. + bufferBuilder.begin(7, POSITION_TEX);// Starts Y. + bufferBuilder.pos(axisalignedbb.minX, axisalignedbb.maxY, axisalignedbb.minZ).color(red, green, blue, alpha).endVertex(); + bufferBuilder.pos(axisalignedbb.maxX, axisalignedbb.maxY, axisalignedbb.minZ).color(red, green, blue, alpha).endVertex(); + bufferBuilder.pos(axisalignedbb.maxX, axisalignedbb.maxY, axisalignedbb.maxZ).color(red, green, blue, alpha).endVertex(); + bufferBuilder.pos(axisalignedbb.minX, axisalignedbb.maxY, axisalignedbb.maxZ).color(red, green, blue, alpha).endVertex(); + bufferBuilder.pos(axisalignedbb.minX, axisalignedbb.maxY, axisalignedbb.minZ).color(red, green, blue, alpha).endVertex(); + bufferBuilder.pos(axisalignedbb.minX, axisalignedbb.maxY, axisalignedbb.maxZ).color(red, green, blue, alpha).endVertex(); + bufferBuilder.pos(axisalignedbb.maxX, axisalignedbb.maxY, axisalignedbb.maxZ).color(red, green, blue, alpha).endVertex(); + bufferBuilder.pos(axisalignedbb.maxX, axisalignedbb.maxY, axisalignedbb.minZ).color(red, green, blue, alpha).endVertex(); + tessellator.draw(); + bufferBuilder.begin(7, POSITION_TEX); + bufferBuilder.pos(axisalignedbb.minX, axisalignedbb.minY, axisalignedbb.minZ).color(red, green, blue, alpha).endVertex(); + bufferBuilder.pos(axisalignedbb.maxX, axisalignedbb.minY, axisalignedbb.minZ).color(red, green, blue, alpha).endVertex(); + bufferBuilder.pos(axisalignedbb.maxX, axisalignedbb.minY, axisalignedbb.maxZ).color(red, green, blue, alpha).endVertex(); + bufferBuilder.pos(axisalignedbb.minX, axisalignedbb.minY, axisalignedbb.maxZ).color(red, green, blue, alpha).endVertex(); + bufferBuilder.pos(axisalignedbb.minX, axisalignedbb.minY, axisalignedbb.minZ).color(red, green, blue, alpha).endVertex(); + bufferBuilder.pos(axisalignedbb.minX, axisalignedbb.minY, axisalignedbb.maxZ).color(red, green, blue, alpha).endVertex(); + bufferBuilder.pos(axisalignedbb.maxX, axisalignedbb.minY, axisalignedbb.maxZ).color(red, green, blue, alpha).endVertex(); + bufferBuilder.pos(axisalignedbb.maxX, axisalignedbb.minY, axisalignedbb.minZ).color(red, green, blue, alpha).endVertex(); + tessellator.draw();// Ends Y. + bufferBuilder.begin(7, POSITION_TEX);// Starts Z. + bufferBuilder.pos(axisalignedbb.minX, axisalignedbb.minY, axisalignedbb.minZ).color(red, green, blue, alpha).endVertex(); + bufferBuilder.pos(axisalignedbb.minX, axisalignedbb.maxY, axisalignedbb.minZ).color(red, green, blue, alpha).endVertex(); + bufferBuilder.pos(axisalignedbb.minX, axisalignedbb.minY, axisalignedbb.maxZ).color(red, green, blue, alpha).endVertex(); + bufferBuilder.pos(axisalignedbb.minX, axisalignedbb.maxY, axisalignedbb.maxZ).color(red, green, blue, alpha).endVertex(); + bufferBuilder.pos(axisalignedbb.maxX, axisalignedbb.minY, axisalignedbb.maxZ).color(red, green, blue, alpha).endVertex(); + bufferBuilder.pos(axisalignedbb.maxX, axisalignedbb.maxY, axisalignedbb.maxZ).color(red, green, blue, alpha).endVertex(); + bufferBuilder.pos(axisalignedbb.maxX, axisalignedbb.minY, axisalignedbb.minZ).color(red, green, blue, alpha).endVertex(); + bufferBuilder.pos(axisalignedbb.maxX, axisalignedbb.maxY, axisalignedbb.minZ).color(red, green, blue, alpha).endVertex(); + tessellator.draw(); + bufferBuilder.begin(7, POSITION_TEX); + bufferBuilder.pos(axisalignedbb.minX, axisalignedbb.maxY, axisalignedbb.maxZ).color(red, green, blue, alpha).endVertex(); + bufferBuilder.pos(axisalignedbb.minX, axisalignedbb.minY, axisalignedbb.maxZ).color(red, green, blue, alpha).endVertex(); + bufferBuilder.pos(axisalignedbb.minX, axisalignedbb.maxY, axisalignedbb.minZ).color(red, green, blue, alpha).endVertex(); + bufferBuilder.pos(axisalignedbb.minX, axisalignedbb.minY, axisalignedbb.minZ).color(red, green, blue, alpha).endVertex(); + bufferBuilder.pos(axisalignedbb.maxX, axisalignedbb.maxY, axisalignedbb.minZ).color(red, green, blue, alpha).endVertex(); + bufferBuilder.pos(axisalignedbb.maxX, axisalignedbb.minY, axisalignedbb.minZ).color(red, green, blue, alpha).endVertex(); + bufferBuilder.pos(axisalignedbb.maxX, axisalignedbb.maxY, axisalignedbb.maxZ).color(red, green, blue, alpha).endVertex(); + bufferBuilder.pos(axisalignedbb.maxX, axisalignedbb.minY, axisalignedbb.maxZ).color(red, green, blue, alpha).endVertex(); + tessellator.draw();// Ends Z. + } + + private void drawSelectionBoundingBox(AxisAlignedBB boundingBox) { + Tessellator tessellator = Tessellator.getInstance(); + BufferBuilder bufferBuilder = tessellator.getBuffer(); + bufferBuilder.begin(3, POSITION); + bufferBuilder.pos(boundingBox.minX, boundingBox.minY, boundingBox.minZ).endVertex(); + bufferBuilder.pos(boundingBox.maxX, boundingBox.minY, boundingBox.minZ).endVertex(); + bufferBuilder.pos(boundingBox.maxX, boundingBox.minY, boundingBox.maxZ).endVertex(); + bufferBuilder.pos(boundingBox.minX, boundingBox.minY, boundingBox.maxZ).endVertex(); + bufferBuilder.pos(boundingBox.minX, boundingBox.minY, boundingBox.minZ).endVertex(); + tessellator.draw(); + bufferBuilder.begin(3, POSITION); + bufferBuilder.pos(boundingBox.minX, boundingBox.maxY, boundingBox.minZ).endVertex(); + bufferBuilder.pos(boundingBox.maxX, boundingBox.maxY, boundingBox.minZ).endVertex(); + bufferBuilder.pos(boundingBox.maxX, boundingBox.maxY, boundingBox.maxZ).endVertex(); + bufferBuilder.pos(boundingBox.minX, boundingBox.maxY, boundingBox.maxZ).endVertex(); + bufferBuilder.pos(boundingBox.minX, boundingBox.maxY, boundingBox.minZ).endVertex(); + tessellator.draw(); + bufferBuilder.begin(1, POSITION); + bufferBuilder.pos(boundingBox.minX, boundingBox.minY, boundingBox.minZ).endVertex(); + bufferBuilder.pos(boundingBox.minX, boundingBox.maxY, boundingBox.minZ).endVertex(); + bufferBuilder.pos(boundingBox.maxX, boundingBox.minY, boundingBox.minZ).endVertex(); + bufferBuilder.pos(boundingBox.maxX, boundingBox.maxY, boundingBox.minZ).endVertex(); + bufferBuilder.pos(boundingBox.maxX, boundingBox.minY, boundingBox.maxZ).endVertex(); + bufferBuilder.pos(boundingBox.maxX, boundingBox.maxY, boundingBox.maxZ).endVertex(); + bufferBuilder.pos(boundingBox.minX, boundingBox.minY, boundingBox.maxZ).endVertex(); + bufferBuilder.pos(boundingBox.minX, boundingBox.maxY, boundingBox.maxZ).endVertex(); + tessellator.draw(); + } +} \ No newline at end of file