Skip to content

Commit

Permalink
Refactor utils into more specific classes
Browse files Browse the repository at this point in the history
  • Loading branch information
legobmw99 committed Jan 21, 2024
1 parent c8d1ee3 commit dfe333f
Show file tree
Hide file tree
Showing 27 changed files with 1,108 additions and 1,054 deletions.
49 changes: 19 additions & 30 deletions src/main/java/com/legobmw99/allomancy/Allomancy.java
Expand Up @@ -8,15 +8,14 @@
import com.legobmw99.allomancy.modules.powers.PowersSetup;
import com.legobmw99.allomancy.modules.powers.client.PowersClientSetup;
import com.legobmw99.allomancy.modules.powers.client.gui.MetalOverlay;
import com.legobmw99.allomancy.modules.powers.client.util.Inputs;
import com.legobmw99.allomancy.modules.powers.data.AllomancerAttachment;
import com.legobmw99.allomancy.network.Network;
import com.legobmw99.allomancy.modules.powers.network.Network;
import com.legobmw99.allomancy.util.AllomancyConfig;
import com.legobmw99.allomancy.util.ItemDisplay;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.bus.api.IEventBus;
import net.neoforged.fml.common.Mod;
import net.neoforged.fml.event.lifecycle.FMLClientSetupEvent;
import net.neoforged.fml.event.lifecycle.FMLCommonSetupEvent;
import net.neoforged.neoforge.common.NeoForge;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
Expand All @@ -32,44 +31,34 @@ public class Allomancy {

public Allomancy(IEventBus bus, Dist dist) {

// Register our setup events on the necessary buses
bus.addListener(Allomancy::init);
bus.addListener(Allomancy::clientInit);
bus.addListener(AllomancyConfig::onLoad);
bus.addListener(AllomancyConfig::onReload);
bus.addListener(CombatClientSetup::registerEntityRenders);
bus.addListener(ItemDisplay::addTabContents);
bus.addListener(Network::registerPayloads);

bus.addListener(MetalOverlay::registerGUI);

if (dist.isClient()) {
bus.addListener(PowersClientSetup::registerKeyBinding);
bus.addListener(PowersClientSetup::registerParticle);
PowersClientSetup.register(bus);
}
bus.addListener(PowersClientSetup::clientInit);
bus.addListener(PowersClientSetup::registerParticle);

NeoForge.EVENT_BUS.addListener(PowersSetup::registerCommands);
bus.addListener(MetalOverlay::registerGUI);
bus.addListener(Inputs::registerKeyBinding);
}

// Register all Registries
AllomancerAttachment.register(bus);
PowersSetup.register(bus);
bus.addListener(PowersSetup::init);
bus.addListener(Network::registerPayloads);

ExtrasSetup.register(bus);
NeoForge.EVENT_BUS.addListener(ExtrasSetup::registerCommands);

CombatSetup.register(bus);
bus.addListener(CombatClientSetup::registerEntityRenders);

ConsumeSetup.register(bus);
MaterialsSetup.register(bus);
ExtrasSetup.register(bus);

ItemDisplay.register(bus);
bus.addListener(ItemDisplay::addTabContents);

AllomancyConfig.register();
bus.addListener(AllomancyConfig::onLoad);
bus.addListener(AllomancyConfig::onReload);

}

public static void clientInit(final FMLClientSetupEvent e) {
PowersSetup.clientInit(e);
}

public static void init(final FMLCommonSetupEvent e) {
PowersSetup.init(e);
}

}
Expand Up @@ -2,8 +2,8 @@

import com.legobmw99.allomancy.api.enums.Metal;
import com.legobmw99.allomancy.modules.combat.entity.ProjectileNuggetEntity;
import com.legobmw99.allomancy.modules.powers.PowerUtils;
import com.legobmw99.allomancy.modules.powers.data.AllomancerAttachment;
import com.legobmw99.allomancy.modules.powers.util.Physical;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResult;
Expand All @@ -20,7 +20,7 @@ public class CoinBagItem extends ProjectileWeaponItem {

public static final Predicate<ItemStack> NUGGETS = (stack) -> {
Item item = stack.getItem();
return PowerUtils.doesResourceContainsMetal(BuiltInRegistries.ITEM.getKey(item)) && BuiltInRegistries.ITEM.getKey(item).getPath().contains("nugget");
return Physical.doesResourceContainMetal(BuiltInRegistries.ITEM.getKey(item)) && BuiltInRegistries.ITEM.getKey(item).getPath().contains("nugget");
};

public CoinBagItem() {
Expand Down
Expand Up @@ -7,7 +7,12 @@
import com.legobmw99.allomancy.modules.extras.advancement.MetalUsedOnPlayerTrigger;
import com.legobmw99.allomancy.modules.extras.block.IronButtonBlock;
import com.legobmw99.allomancy.modules.extras.block.IronLeverBlock;
import com.legobmw99.allomancy.modules.extras.command.AllomancyPowerCommand;
import com.legobmw99.allomancy.modules.extras.command.AllomancyPowerType;
import net.minecraft.advancements.CriterionTrigger;
import net.minecraft.commands.synchronization.ArgumentTypeInfo;
import net.minecraft.commands.synchronization.ArgumentTypeInfos;
import net.minecraft.commands.synchronization.SingletonArgumentInfo;
import net.minecraft.core.registries.Registries;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.TagKey;
Expand All @@ -16,6 +21,7 @@
import net.minecraft.world.item.Item;
import net.minecraft.world.level.block.entity.BannerPattern;
import net.neoforged.bus.api.IEventBus;
import net.neoforged.neoforge.event.RegisterCommandsEvent;
import net.neoforged.neoforge.registries.DeferredBlock;
import net.neoforged.neoforge.registries.DeferredHolder;
import net.neoforged.neoforge.registries.DeferredItem;
Expand Down Expand Up @@ -45,6 +51,12 @@ public class ExtrasSetup {
public static final List<TagKey<BannerPattern>> PATTERN_KEYS = new ArrayList<>();

public static final List<DeferredItem<BannerPatternItem>> PATTERN_ITEMS = new ArrayList<>();
private static final DeferredRegister<ArgumentTypeInfo<?, ?>> COMMAND_ARGUMENT_TYPES = DeferredRegister.create(Registries.COMMAND_ARGUMENT_TYPE, Allomancy.MODID);
private static final Supplier<SingletonArgumentInfo<AllomancyPowerType>> CONTAINER_CLASS = COMMAND_ARGUMENT_TYPES.register("allomancy_power",
() -> ArgumentTypeInfos.registerByClass(
AllomancyPowerType.class,
SingletonArgumentInfo.contextFree(
AllomancyPowerType::allomancyPowerType)));


static {
Expand Down Expand Up @@ -72,6 +84,11 @@ public static void register(IEventBus bus) {
ITEMS.register(bus);
BP.register(bus);
CT.register(bus);
COMMAND_ARGUMENT_TYPES.register(bus);
}

public static void registerCommands(final RegisterCommandsEvent e) {
AllomancyPowerCommand.register(e.getDispatcher());
}

}
@@ -1,9 +1,9 @@
package com.legobmw99.allomancy.modules.powers.command;
package com.legobmw99.allomancy.modules.extras.command;

import com.legobmw99.allomancy.api.data.IAllomancerData;
import com.legobmw99.allomancy.api.enums.Metal;
import com.legobmw99.allomancy.modules.powers.data.AllomancerAttachment;
import com.legobmw99.allomancy.network.Network;
import com.legobmw99.allomancy.modules.powers.network.Network;
import com.mojang.brigadier.CommandDispatcher;
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
import com.mojang.brigadier.context.CommandContext;
Expand Down
@@ -1,4 +1,4 @@
package com.legobmw99.allomancy.modules.powers.command;
package com.legobmw99.allomancy.modules.extras.command;

import com.legobmw99.allomancy.api.enums.Metal;
import com.mojang.brigadier.StringReader;
Expand Down
@@ -1,39 +1,32 @@
package com.legobmw99.allomancy.modules.powers;

import com.legobmw99.allomancy.Allomancy;
import com.legobmw99.allomancy.api.data.IAllomancerData;
import com.legobmw99.allomancy.api.enums.Metal;
import com.legobmw99.allomancy.modules.combat.item.KolossBladeItem;
import com.legobmw99.allomancy.modules.extras.ExtrasSetup;
import com.legobmw99.allomancy.modules.materials.MaterialsSetup;
import com.legobmw99.allomancy.modules.powers.data.AllomancerAttachment;
import com.legobmw99.allomancy.modules.powers.data.AllomancerData;
import com.legobmw99.allomancy.modules.powers.network.EnhanceTimePayload;
import com.legobmw99.allomancy.network.Network;
import com.legobmw99.allomancy.modules.powers.network.Network;
import com.legobmw99.allomancy.modules.powers.util.Emotional;
import com.legobmw99.allomancy.modules.powers.util.Enhancement;
import com.legobmw99.allomancy.modules.powers.util.Physical;
import com.legobmw99.allomancy.modules.powers.util.Temporal;
import net.minecraft.core.BlockPos;
import net.minecraft.core.registries.Registries;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.NbtAccounter;
import net.minecraft.nbt.NbtIo;
import net.minecraft.resources.ResourceKey;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.damagesource.DamageTypes;
import net.minecraft.world.effect.MobEffectInstance;
import net.minecraft.world.effect.MobEffects;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.item.ItemEntity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.GameRules;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.EntityBlock;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityTicker;
import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.neoforge.event.TickEvent;
import net.neoforged.neoforge.event.entity.living.LivingAttackEvent;
Expand Down Expand Up @@ -181,7 +174,7 @@ public static void onEntityHurt(final LivingHurtEvent event) {
if (data.isEnhanced()) {
if (source.getMainHandItem().getItem() instanceof KolossBladeItem) {
event.setAmount(550); // Duralumin OHK with Koloss blade
PowerUtils.wipePlayer(source);
Enhancement.wipePlayer(source);
} else {
event.setAmount(event.getAmount() * 3);
}
Expand All @@ -194,8 +187,8 @@ public static void onEntityHurt(final LivingHurtEvent event) {
ExtrasSetup.METAL_USED_ON_ENTITY_TRIGGER.get().trigger(source, event.getEntity(), Metal.CHROMIUM, data.isEnhanced());
if (event.getEntity() instanceof ServerPlayer player) {
ExtrasSetup.METAL_USED_ON_PLAYER_TRIGGER.get().trigger(player, Metal.CHROMIUM, data.isEnhanced());
if (!PowerUtils.hasTinFoilHat(player)) {
PowerUtils.wipePlayer(player);
if (!Emotional.hasTinFoilHat(player)) {
Enhancement.wipePlayer(player);
}
}
}
Expand Down Expand Up @@ -227,7 +220,7 @@ public static void onPlayerAttacked(final LivingAttackEvent event) {
if (data.isBurning(Metal.STEEL)) {
if (event.getSource().type().equals(player.level().registryAccess().registryOrThrow(Registries.DAMAGE_TYPE).getHolderOrThrow(DamageTypes.FALL).value())) {
BlockPos on = player.getOnPos();
if (PowerUtils.isBlockStateMetal(player.level().getBlockState(on)) || PowerUtils.isBlockStateMetal(player.level().getBlockState(on.above()))) {
if (Physical.isBlockStateMetallic(player.level().getBlockState(on)) || Physical.isBlockStateMetallic(player.level().getBlockState(on.above()))) {
event.setCanceled(true);
}
}
Expand Down Expand Up @@ -262,7 +255,7 @@ private static void playerPowerTick(Player curPlayer, Level level) {
* ALUMINUM AND DURALUMIN *
*********************************************/
if (data.isBurning(Metal.ALUMINUM)) {
PowerUtils.wipePlayer(curPlayer);
Enhancement.wipePlayer(curPlayer);
syncRequired = true;
}
if (data.isBurning(Metal.DURALUMIN) && !data.isEnhanced()) {
Expand All @@ -286,69 +279,26 @@ private static void playerPowerTick(Player curPlayer, Level level) {
* CHROMIUM (enhanced) *
*********************************************/
if (data.isEnhanced() && data.isBurning(Metal.CHROMIUM)) {
if (level instanceof ServerLevel) {
int max = 20;
Vec3 negative = curPlayer.position().add(-max, -max, -max);
Vec3 positive = curPlayer.position().add(max, max, max);
level
.getEntitiesOfClass(Player.class, new AABB(negative, positive))
.forEach(otherPlayer -> otherPlayer.getData(AllomancerAttachment.ALLOMANCY_DATA).drainMetals(Metal.values()));
}
Enhancement.wipeNearby(curPlayer, level);
}

/*********************************************
* GOLD AND ELECTRUM (enhanced) *
*********************************************/
if (data.isEnhanced() && data.isBurning(Metal.ELECTRUM) && data.getStored(Metal.ELECTRUM) >= 9) {
ResourceKey<Level> spawnDim = data.getSpawnDim();
BlockPos spawnLoc;

if (spawnDim != null) {
spawnLoc = data.getSpawnLoc();
} else {
spawnDim = Level.OVERWORLD; // no spawn --> use world spawn
spawnLoc = new BlockPos(level.getLevelData().getXSpawn(), level.getLevelData().getYSpawn(), level.getLevelData().getZSpawn());

}

PowerUtils.teleport(curPlayer, level, spawnDim, spawnLoc);
if (data.isBurning(Metal.DURALUMIN)) {
data.drainMetals(Metal.DURALUMIN);
}
data.drainMetals(Metal.ELECTRUM);


Enhancement.teleportToSpawn(curPlayer, level, data);
} else if (data.isEnhanced() && data.isBurning(Metal.GOLD) && data.getStored(Metal.GOLD) >= 9) { // These should be mutually exclusive
ResourceKey<Level> deathDim = data.getDeathDim();
if (deathDim != null) {
PowerUtils.teleport(curPlayer, level, deathDim, data.getDeathLoc());
if (data.isBurning(Metal.DURALUMIN)) {
data.drainMetals(Metal.DURALUMIN);
}
data.drainMetals(Metal.GOLD);
}
Enhancement.teleportToLastDeath(curPlayer, level, data);
}


/*********************************************
* BENDALLOY AND CADMIUM *
*********************************************/
if (data.isBurning(Metal.BENDALLOY) && !data.isBurning(Metal.CADMIUM)) {
curPlayer.addEffect(new MobEffectInstance(MobEffects.DIG_SPEED, 10, 3, true, false));

tickNearby(curPlayer, level, data);
Temporal.speedUpNearby(curPlayer, level, data);
}
if (data.isBurning(Metal.CADMIUM) && !data.isBurning(Metal.BENDALLOY)) {
int max = data.isEnhanced() ? 20 : 10;
Vec3 negative = curPlayer.position().add(-max, -max, -max);
Vec3 positive = curPlayer.position().add(max, max, max);
int slowness_amplifier = data.isEnhanced() ? 255 : 2; // Duralumin freezes entities
level.getEntitiesOfClass(LivingEntity.class, new AABB(negative, positive)).forEach(entity -> {
entity.addEffect(new MobEffectInstance(MobEffects.SLOW_FALLING, 10, 0, true, false));
if (entity != curPlayer) {
entity.addEffect(new MobEffectInstance(MobEffects.MOVEMENT_SLOWDOWN, 10, slowness_amplifier, true, false));
}
});
Temporal.slowDownNearby(curPlayer, level, data);
}


Expand All @@ -362,10 +312,10 @@ private static void playerPowerTick(Player curPlayer, Level level) {
if (level.random.nextInt(50) == 0) {
curPlayer.addEffect(new MobEffectInstance(MobEffects.CONFUSION, 100, 0, true, false));
}
} else { // Remove blindness from normal tin burners
if (curPlayer.hasEffect(MobEffects.BLINDNESS)) {
curPlayer.removeEffect(MobEffects.BLINDNESS);
}
}
// Remove blindness from normal tin burners
if (curPlayer.hasEffect(MobEffects.BLINDNESS)) {
curPlayer.removeEffect(MobEffects.BLINDNESS);
}
}
// Remove night vision from non-tin burners if duration < 10 seconds. Related to the above issue with flashing, only if the amplifier is 5
Expand Down Expand Up @@ -400,39 +350,5 @@ private static void playerPowerTick(Player curPlayer, Level level) {
}
}
}

@SuppressWarnings("unchecked")
private static void tickNearby(Player curPlayer, Level level, IAllomancerData data) {
if (level instanceof ServerLevel serverLevel) {
int max = data.isEnhanced() ? 10 : 5;
BlockPos negative = curPlayer.blockPosition().offset(-max, -max, -max);
BlockPos positive = curPlayer.blockPosition().offset(max, max, max);
serverLevel.getEntitiesOfClass(LivingEntity.class, AABB.encapsulatingFullBlocks(negative, positive)).forEach(entity -> {
entity.aiStep();
entity.aiStep();
});
BlockPos.betweenClosedStream(negative, positive).forEach(bp -> {
BlockState block = level.getBlockState(bp);
BlockEntity te = level.getBlockEntity(bp);
if (te == null) {
if (block.isRandomlyTicking()) {
for (int i = 0; i < max * 4 / 15; i++) {
block.randomTick(serverLevel, bp, serverLevel.random);
}
}
} else {
Block underlying_block = block.getBlock();
if (underlying_block instanceof EntityBlock eb) {
BlockEntityTicker ticker = eb.getTicker(level, block, te.getType());
if (ticker != null) {
for (int i = 0; i < max * 4 / 3; i++) {
ticker.tick(level, bp, block, te);
}
}
}
}
});
}
}
}

0 comments on commit dfe333f

Please sign in to comment.