aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/de/hysky/skyblocker/SkyblockerMod.java2
-rw-r--r--src/main/java/de/hysky/skyblocker/mixin/ClientPlayNetworkHandlerMixin.java9
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/Utils.java11
-rw-r--r--src/main/java/me/xmrvizzy/skyblocker/skyblock/diana/MythologicalRitual.java75
4 files changed, 96 insertions, 1 deletions
diff --git a/src/main/java/de/hysky/skyblocker/SkyblockerMod.java b/src/main/java/de/hysky/skyblocker/SkyblockerMod.java
index 115f90ec..6cdb507f 100644
--- a/src/main/java/de/hysky/skyblocker/SkyblockerMod.java
+++ b/src/main/java/de/hysky/skyblocker/SkyblockerMod.java
@@ -3,6 +3,7 @@ package de.hysky.skyblocker;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import de.hysky.skyblocker.skyblock.*;
+import de.hysky.skyblocker.skyblock.diana.MythologicalRitual;
import de.hysky.skyblocker.skyblock.dungeon.*;
import de.hysky.skyblocker.skyblock.dungeon.secrets.DungeonSecrets;
import de.hysky.skyblocker.skyblock.item.*;
@@ -76,6 +77,7 @@ public class SkyblockerMod implements ClientModInitializer {
WikiLookup.init();
FairySouls.init();
Relics.init();
+ MythologicalRitual.init();
BackpackPreview.init();
QuickNav.init();
ItemCooldowns.init();
diff --git a/src/main/java/de/hysky/skyblocker/mixin/ClientPlayNetworkHandlerMixin.java b/src/main/java/de/hysky/skyblocker/mixin/ClientPlayNetworkHandlerMixin.java
index fff534b2..f8f71512 100644
--- a/src/main/java/de/hysky/skyblocker/mixin/ClientPlayNetworkHandlerMixin.java
+++ b/src/main/java/de/hysky/skyblocker/mixin/ClientPlayNetworkHandlerMixin.java
@@ -2,14 +2,16 @@ package de.hysky.skyblocker.mixin;
import com.llamalad7.mixinextras.injector.WrapWithCondition;
import com.llamalad7.mixinextras.sugar.Local;
-import de.hysky.skyblocker.skyblock.dungeon.secrets.DungeonSecrets;
import dev.cbyrne.betterinject.annotations.Inject;
import de.hysky.skyblocker.skyblock.FishingHelper;
+import de.hysky.skyblocker.skyblock.diana.MythologicalRitual;
+import de.hysky.skyblocker.skyblock.dungeon.secrets.DungeonSecrets;
import de.hysky.skyblocker.utils.Utils;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.network.ClientPlayNetworkHandler;
import net.minecraft.entity.ItemEntity;
import net.minecraft.entity.LivingEntity;
+import net.minecraft.network.packet.s2c.play.ParticleS2CPacket;
import net.minecraft.network.packet.s2c.play.PlaySoundS2CPacket;
import org.slf4j.Logger;
import org.spongepowered.asm.mixin.Mixin;
@@ -45,4 +47,9 @@ public abstract class ClientPlayNetworkHandlerMixin {
private boolean skyblocker$cancelTeamWarning(Logger instance, String format, Object... arg) {
return !Utils.isOnHypixel();
}
+
+ @Inject(method = "onParticle", at = @At("RETURN"))
+ private void skyblocker$onParticle(ParticleS2CPacket packet) {
+ MythologicalRitual.onParticle(packet);
+ }
}
diff --git a/src/main/java/de/hysky/skyblocker/utils/Utils.java b/src/main/java/de/hysky/skyblocker/utils/Utils.java
index c1b4223f..bbfd1101 100644
--- a/src/main/java/de/hysky/skyblocker/utils/Utils.java
+++ b/src/main/java/de/hysky/skyblocker/utils/Utils.java
@@ -19,6 +19,7 @@ import net.minecraft.client.network.PlayerListEntry;
import net.minecraft.scoreboard.*;
import net.minecraft.text.Text;
import net.minecraft.util.Formatting;
+import org.jetbrains.annotations.NotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -40,10 +41,15 @@ public class Utils {
* The following fields store data returned from /locraw: {@link #profile}, {@link #server}, {@link #gameType}, {@link #locationRaw}, and {@link #map}.
*/
@SuppressWarnings("JavadocDeclaration")
+ @NotNull
private static String profile = "";
+ @NotNull
private static String server = "";
+ @NotNull
private static String gameType = "";
+ @NotNull
private static String locationRaw = "";
+ @NotNull
private static String map = "";
private static long clientWorldJoinTime = 0;
private static boolean sentLocRaw = false;
@@ -78,6 +84,7 @@ public class Utils {
/**
* @return the profile parsed from the player list.
*/
+ @NotNull
public static String getProfile() {
return profile;
}
@@ -85,6 +92,7 @@ public class Utils {
/**
* @return the server parsed from /locraw.
*/
+ @NotNull
public static String getServer() {
return server;
}
@@ -92,6 +100,7 @@ public class Utils {
/**
* @return the game type parsed from /locraw.
*/
+ @NotNull
public static String getGameType() {
return gameType;
}
@@ -99,6 +108,7 @@ public class Utils {
/**
* @return the location raw parsed from /locraw.
*/
+ @NotNull
public static String getLocationRaw() {
return locationRaw;
}
@@ -106,6 +116,7 @@ public class Utils {
/**
* @return the map parsed from /locraw.
*/
+ @NotNull
public static String getMap() {
return map;
}
diff --git a/src/main/java/me/xmrvizzy/skyblocker/skyblock/diana/MythologicalRitual.java b/src/main/java/me/xmrvizzy/skyblocker/skyblock/diana/MythologicalRitual.java
new file mode 100644
index 00000000..a70fa172
--- /dev/null
+++ b/src/main/java/me/xmrvizzy/skyblocker/skyblock/diana/MythologicalRitual.java
@@ -0,0 +1,75 @@
+package me.xmrvizzy.skyblocker.skyblock.diana;
+
+import com.mojang.brigadier.Command;
+import it.unimi.dsi.fastutil.booleans.BooleanBooleanMutablePair;
+import me.xmrvizzy.skyblocker.SkyblockerMod;
+import me.xmrvizzy.skyblocker.config.SkyblockerConfig;
+import me.xmrvizzy.skyblocker.utils.Utils;
+import me.xmrvizzy.skyblocker.utils.render.RenderHelper;
+import net.fabricmc.fabric.api.client.command.v2.ClientCommandRegistrationCallback;
+import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext;
+import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents;
+import net.fabricmc.fabric.api.event.player.AttackBlockCallback;
+import net.minecraft.entity.player.PlayerEntity;
+import net.minecraft.network.packet.s2c.play.ParticleS2CPacket;
+import net.minecraft.particle.ParticleTypes;
+import net.minecraft.util.ActionResult;
+import net.minecraft.util.DyeColor;
+import net.minecraft.util.Hand;
+import net.minecraft.util.math.BlockPos;
+import net.minecraft.util.math.Direction;
+import net.minecraft.world.World;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import static net.fabricmc.fabric.api.client.command.v2.ClientCommandManager.literal;
+
+public class MythologicalRitual {
+ private static final Map<BlockPos, BooleanBooleanMutablePair> particlesMap = new HashMap<>();
+ private static final Set<BlockPos> griffinBurrows = new HashSet<>();
+
+ public static void init() {
+ WorldRenderEvents.AFTER_TRANSLUCENT.register(MythologicalRitual::render);
+ AttackBlockCallback.EVENT.register(MythologicalRitual::onAttackBlock);
+ ClientCommandRegistrationCallback.EVENT.register((dispatcher, registryAccess) -> dispatcher.register(
+ literal(SkyblockerMod.NAMESPACE).then(literal("diana").then(literal("clearGriffinBurrows").executes(context -> {
+ griffinBurrows.clear();
+ return Command.SINGLE_SUCCESS;
+ }))))
+ );
+ }
+
+ public static void onParticle(ParticleS2CPacket packet) {
+ if (isActive()&& ParticleTypes.CRIT.equals(packet.getParameters().getType()) || ParticleTypes.ENCHANT.equals(packet.getParameters().getType())) {
+ BlockPos pos = BlockPos.ofFloored(packet.getX(), packet.getY(), packet.getZ());
+ BooleanBooleanMutablePair particlesAtPos = particlesMap.computeIfAbsent(pos, pos1 -> BooleanBooleanMutablePair.of(false, false));
+ particlesAtPos.left(particlesAtPos.leftBoolean() || ParticleTypes.CRIT.equals(packet.getParameters().getType()));
+ particlesAtPos.right(particlesAtPos.rightBoolean() || ParticleTypes.ENCHANT.equals(packet.getParameters().getType()));
+ if (particlesAtPos.leftBoolean() && particlesAtPos.rightBoolean()) {
+ griffinBurrows.add(pos);
+ }
+ }
+ }
+
+ public static void render(WorldRenderContext context) {
+ if (isActive()) {
+ for (BlockPos griffinBorrow : griffinBurrows) {
+ RenderHelper.renderFilledThroughWallsWithBeaconBeam(context, griffinBorrow, DyeColor.GREEN.getColorComponents(), 0.5F);
+ }
+ }
+ }
+
+ public static ActionResult onAttackBlock(PlayerEntity player, World world, Hand hand, BlockPos pos, Direction direction) {
+ if (isActive()) {
+ griffinBurrows.remove(pos);
+ }
+ return ActionResult.PASS;
+ }
+
+ private static boolean isActive() {
+ return SkyblockerConfig.get().general.fairySouls.enableFairySoulsHelper && Utils.getLocationRaw().equals("hub") ; // TODO Change to actual config option
+ }
+}