Skip to content

Commit 02da2bc

Browse files
[fix] Fix Crushing Wheel killed entities do not drop exp & add config
1 parent aef2c3f commit 02da2bc

File tree

4 files changed

+64
-2
lines changed

4 files changed

+64
-2
lines changed

Diff for: src/main/java/plus/dragons/createenchantmentindustry/common/kinetics/grindstone/GrindstoneDrainBlockEntity.java

-2
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,6 @@
3030
import com.simibubi.create.foundation.fluid.FluidIngredient;
3131
import java.util.List;
3232
import java.util.Optional;
33-
34-
import com.simibubi.create.foundation.item.ItemHelper;
3533
import net.createmod.catnip.math.VecHelper;
3634
import net.minecraft.core.BlockPos;
3735
import net.minecraft.core.Direction;

Diff for: src/main/java/plus/dragons/createenchantmentindustry/config/CEIKineticsConfig.java

+6
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ public class CEIKineticsConfig extends ConfigBase {
2828
public final ConfigBool deployerCollectXp = b(true, "deployerCollectXp", Comments.deployerCollectXp);
2929
public final ConfigBool deployerMendItem = b(true, "deployerMendItem", Comments.deployerMendItem);
3030
public final ConfigBool deployerSweepAttack = b(true, "deployerSweepAttack", Comments.deployerSweepAttack);
31+
public final ConfigBool crushingWheelKillDropXp = b(true, "crushingWheelKillDropXp", Comments.crushingWheelKillDropXp);
32+
public final ConfigFloat crushingWheelKillDropXpRate = f(0.3f,0,1, "crushingWheelKillDropXpRate", Comments.crushingWheelKillDropXpRate);
33+
public final ConfigFloat crushingWheelKillDropXpScale = f(0.34f,0,1, "crushingWheelKillDropXpScale", Comments.crushingWheelKillDropXpScale);
3134
public final CEIStressConfig stressValues = nested(0, CEIStressConfig::new, Comments.stress);
3235

3336
@Override
@@ -44,5 +47,8 @@ static class Comments {
4447
static final String deployerCollectXp = "Whether Deployer collect dropped experience as Experience Nugget.";
4548
static final String deployerMendItem = "Whether Mending enchantment applies to Deployer held item (Needs deployerCollectXp = true).";
4649
static final String deployerSweepAttack = "Whether Deployer can perform sweep attack.";
50+
static final String crushingWheelKillDropXp = "Whether Crushing Wheel killed entities should drop experience.";
51+
static final String crushingWheelKillDropXpRate = "Possibility for Crushing Wheel killed entities drop experience.";
52+
static final String crushingWheelKillDropXpScale = "Scale for experience dropped from Crushing Wheel killed entities.";
4753
}
4854
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package plus.dragons.createenchantmentindustry.mixin;
2+
3+
import com.simibubi.create.AllItems;
4+
import com.simibubi.create.content.kinetics.crusher.CrushingWheelControllerBlock;
5+
import com.simibubi.create.content.kinetics.crusher.CrushingWheelControllerBlockEntity;
6+
import net.createmod.catnip.math.VecHelper;
7+
import net.minecraft.core.Direction;
8+
import net.minecraft.nbt.NbtUtils;
9+
import net.minecraft.server.level.ServerLevel;
10+
import net.minecraft.world.entity.Entity;
11+
import net.minecraft.world.entity.LivingEntity;
12+
import net.minecraft.world.entity.item.ItemEntity;
13+
import net.minecraft.world.item.ItemStack;
14+
import net.minecraft.world.phys.Vec3;
15+
import org.spongepowered.asm.mixin.Mixin;
16+
import org.spongepowered.asm.mixin.Shadow;
17+
import org.spongepowered.asm.mixin.injection.At;
18+
import org.spongepowered.asm.mixin.injection.Inject;
19+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
20+
import plus.dragons.createenchantmentindustry.config.CEIConfig;
21+
22+
@Mixin(CrushingWheelControllerBlockEntity.class)
23+
public class CrushingWheelControllerBlockEntityMixin {
24+
25+
@Shadow(remap = false)
26+
public Entity processingEntity;
27+
28+
@Inject(method = "tick",
29+
at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/Entity;setPos(DDD)V", shift = At.Shift.AFTER))
30+
private void injected(CallbackInfo ci) {
31+
if(CEIConfig.kinetics().crushingWheelKillDropXp.get() && !processingEntity.isAlive() && processingEntity instanceof LivingEntity livingEntity){
32+
if(!(processingEntity.level() instanceof ServerLevel serverLevel)) return;
33+
int reward = Math.max((int) Math.floor(livingEntity.getExperienceReward(serverLevel,processingEntity) * CEIConfig.kinetics().crushingWheelKillDropXpScale.get()),1);
34+
if(reward >= 1000 || Math.random( ) < CEIConfig.kinetics().crushingWheelKillDropXpRate.get()){
35+
int count = reward/3 + ((Math.random()<(reward%3/3f))? 1: 0);
36+
if(count!=0){
37+
var self = (CrushingWheelControllerBlockEntity)(Object)this;
38+
Vec3 centerPos = VecHelper.getCenterOf(self.getBlockPos());
39+
Direction facing = self.getBlockState().getValue(CrushingWheelControllerBlock.FACING);
40+
int offset = facing.getAxisDirection()
41+
.getStep();
42+
Vec3 outSpeed = new Vec3((facing.getAxis() == Direction.Axis.X ? 0.25D : 0.0D) * offset,
43+
offset == 1 ? (facing.getAxis() == Direction.Axis.Y ? 0.5D : 0.0D) : 0.0D,
44+
(facing.getAxis() == Direction.Axis.Z ? 0.25D : 0.0D) * offset);
45+
Vec3 outPos = centerPos.add((facing.getAxis() == Direction.Axis.X ? .55f * offset : 0f),
46+
(facing.getAxis() == Direction.Axis.Y ? .55f * offset : 0f), (facing.getAxis() == Direction.Axis.Z ? .55f * offset : 0f));
47+
var expItem = new ItemEntity(processingEntity.level(),outPos.x(),outPos.y(),outPos.z(), new ItemStack(AllItems.EXP_NUGGET.get(),count));
48+
expItem.setDeltaMovement(outSpeed);
49+
expItem.getPersistentData()
50+
.put("BypassCrushingWheel", NbtUtils.writeBlockPos(self.getBlockPos()));
51+
processingEntity.level().addFreshEntity(expItem);
52+
}
53+
}
54+
}
55+
56+
}
57+
}

Diff for: src/main/resources/create_enchantment_industry.mixins.json

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
"mixins": [
88
"ConnectivityHandlerMixin",
99
"CreateNBTProcessorsMixin",
10+
"CrushingWheelControllerBlockEntityMixin",
1011
"DeployerFakePlayerMixin",
1112
"DeployerHandlerMixin",
1213
"EnchantmentHelperMixin",

0 commit comments

Comments
 (0)