diff --git a/src/main/java/org/dimdev/dimdoors/mixin/PlayerEntityMixin.java b/src/main/java/org/dimdev/dimdoors/mixin/PlayerEntityMixin.java index 683eaac6..e57b332a 100644 --- a/src/main/java/org/dimdev/dimdoors/mixin/PlayerEntityMixin.java +++ b/src/main/java/org/dimdev/dimdoors/mixin/PlayerEntityMixin.java @@ -25,10 +25,6 @@ import java.util.Random; @Mixin(value = PlayerEntity.class, priority = 900) public abstract class PlayerEntityMixin extends LivingEntity { - private static final int RANDOM_ACTION_BOUND = 400; - private static final int CHANCE_TO_DECREASE_ARMOR_DURABILITY = 20; - private static final int CHANCE_TO_REPLACE_ITEMSLOT_WITH_UNRAVLED_FABRIC = 10; - Random random = new Random(); @Shadow public abstract void incrementStat(Identifier stat); @@ -37,53 +33,7 @@ public abstract class PlayerEntityMixin extends LivingEntity { super(entityType, world); } - @Inject(method = "tick", at = @At("HEAD"), cancellable = true) - public void mobTickMixin(CallbackInfo ci) { - if (PlayerModifiersComponent.getFray(this) >= 125) { - if (random.nextInt(RANDOM_ACTION_BOUND) == 0) { - doRandomFunction(this); - } - } - } - private void doRandomFunction(LivingEntity player) { - switch (random.nextInt(2)) { - case 0: - decreaseArmorDurability((PlayerEntity) player); - break; - case 1: - addRandomUnravledFabric((PlayerEntity) player); - break; - default: - } - - } - - private void addRandomUnravledFabric(PlayerEntity player) { - if(PlayerModifiersComponent.getFray(player) < DimensionalDoorsInitializer.getConfig().getPlayerConfig().fray.unravledFabricInInventoryFray) - return; - if(random.nextInt(CHANCE_TO_REPLACE_ITEMSLOT_WITH_UNRAVLED_FABRIC) != 0) - return; - - int slot = random.nextInt(player.getInventory().main.size()); - - if(!player.getInventory().main.get(slot).isEmpty() && ! (player.getInventory().main.get(slot).getItem() == ModItems.UNRAVELLED_FABRIC)) - return; - if (player.getInventory().main.get(slot).getCount() >= 64) - return; - player.getInventory().main.set(slot, new ItemStack(ModItems.UNRAVELLED_FABRIC, 1 + player.getInventory().main.get(slot).getCount())); - - } - - private void decreaseArmorDurability(PlayerEntity player) { - if(PlayerModifiersComponent.getFray(player) < DimensionalDoorsInitializer.getConfig().getPlayerConfig().fray.unravledFabricInInventoryFray) - return; - for (int i = 0; i < player.getInventory().armor.size(); i++) - if (random.nextInt(CHANCE_TO_DECREASE_ARMOR_DURABILITY) == 0) - player.getArmorItems().forEach((itemStack) -> { - itemStack.setDamage(itemStack.getDamage() + 1); - }); - } @Inject(method = "handleFallDamage", at = @At("HEAD"), cancellable = true) public void handleLimboFallDamage(float fallDistance, float damageMultiplier, DamageSource damageSource, CallbackInfoReturnable cir) { diff --git a/src/main/java/org/dimdev/dimdoors/mixin/ServerPlayerEntityMixin.java b/src/main/java/org/dimdev/dimdoors/mixin/ServerPlayerEntityMixin.java index 2522a0f6..7a42e3f9 100644 --- a/src/main/java/org/dimdev/dimdoors/mixin/ServerPlayerEntityMixin.java +++ b/src/main/java/org/dimdev/dimdoors/mixin/ServerPlayerEntityMixin.java @@ -1,10 +1,14 @@ package org.dimdev.dimdoors.mixin; +import net.minecraft.item.ItemStack; +import org.dimdev.dimdoors.DimensionalDoorsInitializer; import org.dimdev.dimdoors.criteria.ModCriteria; import org.dimdev.dimdoors.entity.limbo.LimboEntranceSource; import org.dimdev.dimdoors.entity.stat.ModStats; import org.dimdev.dimdoors.api.util.TeleportUtil; +import org.dimdev.dimdoors.item.ModItems; import org.dimdev.dimdoors.world.ModDimensions; +import org.dimdev.dimdoors.world.level.component.PlayerModifiersComponent; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -19,12 +23,67 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.registry.RegistryKey; import net.minecraft.world.World; +import java.util.Random; + @Mixin(value = ServerPlayerEntity.class, priority = 900) public abstract class ServerPlayerEntityMixin extends PlayerEntityMixin { + private static final int RANDOM_ACTION_BOUND = 100; + private static final int CHANCE_TO_DECREASE_ARMOR_DURABILITY = 20; + private static final int CHANCE_TO_REPLACE_ITEMSLOT_WITH_UNRAVLED_FABRIC = 10; + Random random = new Random(); + public ServerPlayerEntityMixin(EntityType entityType, World world) { super(entityType, world); } + @Inject(method = "tick", at = @At("HEAD"), cancellable = true) + public void mobTickMixin(CallbackInfo ci) { + if (PlayerModifiersComponent.getFray(this) >= 125) { + if (random.nextInt(RANDOM_ACTION_BOUND) == 0) { + doRandomFunction(this); + } + } + } + + private void doRandomFunction(LivingEntity player) { + switch (random.nextInt(2)) { + case 0: + decreaseArmorDurability((PlayerEntity) player); + break; + case 1: + addRandomUnravledFabric((PlayerEntity) player); + break; + default: + } + + } + + private void addRandomUnravledFabric(PlayerEntity player) { + if(PlayerModifiersComponent.getFray(player) < DimensionalDoorsInitializer.getConfig().getPlayerConfig().fray.unravledFabricInInventoryFray) + return; + if(random.nextInt(CHANCE_TO_REPLACE_ITEMSLOT_WITH_UNRAVLED_FABRIC) != 0) + return; + + int slot = random.nextInt(player.getInventory().main.size()); + + if(!player.getInventory().main.get(slot).isEmpty() && ! (player.getInventory().main.get(slot).getItem() == ModItems.UNRAVELLED_FABRIC)) + return; + if (player.getInventory().main.get(slot).getCount() >= 64) + return; + player.getInventory().main.set(slot, new ItemStack(ModItems.UNRAVELLED_FABRIC, 1 + player.getInventory().main.get(slot).getCount())); + + } + + private void decreaseArmorDurability(PlayerEntity player) { + if(PlayerModifiersComponent.getFray(player) < DimensionalDoorsInitializer.getConfig().getPlayerConfig().fray.unravledFabricInInventoryFray) + return; + for (int i = 0; i < player.getInventory().armor.size(); i++) + if (random.nextInt(CHANCE_TO_DECREASE_ARMOR_DURABILITY) == 0) + player.getArmorItems().forEach((itemStack) -> { + itemStack.setDamage(itemStack.getDamage() + 1); + }); + } + @Inject(method = "onDeath", at = @At("HEAD"), cancellable = true) public void checkDeathServer(DamageSource source, CallbackInfo ci) { this.doOnDeathStuff(source, ci);