Skip to content

Commit

Permalink
Make Myths & Legends spawning bypass spawn protection
Browse files Browse the repository at this point in the history
  • Loading branch information
KaptainWutax committed Jan 11, 2025
1 parent 6b40636 commit c69ae69
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 9 deletions.
41 changes: 32 additions & 9 deletions common/src/main/java/abeshutt/staracademy/StarAcademyMod.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@

public final class StarAcademyMod {

public static final ThreadLocal<Boolean> FORCE_SPAWNING = ThreadLocal.withInitial(() -> false);

public static final String ID = "academy";
public static final Logger LOGGER = LogManager.getLogger(ID);

Expand Down Expand Up @@ -57,6 +59,10 @@ public static void init() {
});

CommonEvents.POKEMON_ENTITY_SPAWN.subscribe(Priority.HIGHEST, event -> {
if(FORCE_SPAWNING.get()) {
return;
}

World world = event.getEntity().getEntityWorld();
WorldBorder border = world.getWorldBorder();
double dx = event.getEntity().getPos().getX() - border.getCenterX();
Expand All @@ -78,21 +84,38 @@ public static void init() {
if(server == null) return;
Pokemon pokemon = event.getEntity().getPokemon();

List<String> prefixes = new ArrayList<>();
if(pokemon.getShiny()) prefixes.add("Shiny");
if(pokemon.isLegendary()) prefixes.add("Legendary");
if(FORCE_SPAWNING.get()) {
List<String> prefixes = new ArrayList<>();
if(pokemon.getShiny()) prefixes.add("Shiny");
if(pokemon.isLegendary()) prefixes.add("Legendary");

if(pokemon.getShiny() || pokemon.isLegendary()) {
MutableText message = Text.empty()
.append(Text.literal("A ").formatted(Formatting.BOLD))
.append(Text.literal(String.join(" ", prefixes)).formatted(Formatting.BOLD))
.append(prefixes.isEmpty() ? Text.empty() : Text.literal(" "))
.append(event.getEntity().getDisplayName().copy().formatted(Formatting.BOLD))
.append(Text.literal(" has spawned near someone!").formatted(Formatting.BOLD));
.append(Text.literal("A ").formatted(Formatting.BOLD))
.append(Text.literal(String.join(" ", prefixes)).formatted(Formatting.BOLD))
.append(prefixes.isEmpty() ? Text.empty() : Text.literal(" "))
.append(event.getEntity().getDisplayName().copy().formatted(Formatting.BOLD))
.append(Text.literal(" has been summoned!").formatted(Formatting.BOLD));

for(ServerPlayerEntity player : server.getPlayerManager().getPlayerList()) {
player.sendMessage(message);
}
} else {
List<String> prefixes = new ArrayList<>();
if(pokemon.getShiny()) prefixes.add("Shiny");
if(pokemon.isLegendary()) prefixes.add("Legendary");

if(pokemon.getShiny() || pokemon.isLegendary()) {
MutableText message = Text.empty()
.append(Text.literal("A ").formatted(Formatting.BOLD))
.append(Text.literal(String.join(" ", prefixes)).formatted(Formatting.BOLD))
.append(prefixes.isEmpty() ? Text.empty() : Text.literal(" "))
.append(event.getEntity().getDisplayName().copy().formatted(Formatting.BOLD))
.append(Text.literal(" has spawned near someone!").formatted(Formatting.BOLD));

for(ServerPlayerEntity player : server.getPlayerManager().getPlayerList()) {
player.sendMessage(message);
}
}
}
});
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package abeshutt.staracademy.mixin.mythsandlegends;

import abeshutt.staracademy.StarAcademyMod;
import com.github.d0ctorleon.mythsandlegends.utils.ForceSpawningUtils;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.util.Hand;
import net.minecraft.util.TypedActionResult;
import net.minecraft.world.World;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;

@Mixin(ForceSpawningUtils.class)
public class MixinForceSpawningUtils {

@Inject(method = "forceSpawnv1", at = @At("HEAD"))
private static void forceSpawnv1Head(World world, PlayerEntity playerEntity, Hand hand, String keyItemIdentifierPath,
CallbackInfoReturnable<TypedActionResult<ItemStack>> cir) {
StarAcademyMod.FORCE_SPAWNING.set(true);
}

@Inject(method = "forceSpawnv1", at = @At("RETURN"))
private static void forceSpawnv1Return(World world, PlayerEntity playerEntity, Hand hand, String keyItemIdentifierPath,
CallbackInfoReturnable<TypedActionResult<ItemStack>> cir) {
StarAcademyMod.FORCE_SPAWNING.set(false);
}

}
1 change: 1 addition & 0 deletions common/src/main/resources/academy-common.mixins.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
"bountiful.MixinBountyItem",
"cloudboots.MixinGoldenFeatherTrinket",
"cobblemon.MixinPokeBallItem",
"mythsandlegends.MixinForceSpawningUtils",
"mythsandlegends.MixinFormAndAspectUtils",
"mythsandlegends.MixinPlayerEvents",
"scout.MixinBaseBagItem",
Expand Down

0 comments on commit c69ae69

Please sign in to comment.