Skip to content

Commit e0fde28

Browse files
committed
add rule: disabledNetherPortalSpawn and optimize code
1 parent 56eb00c commit e0fde28

File tree

5 files changed

+57
-76
lines changed

5 files changed

+57
-76
lines changed

src/main/java/io/github/optijava/opt_carpet_addition/OptCarpetSettings.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,4 +104,9 @@ public class OptCarpetSettings {
104104
)
105105
public static boolean disabledEnderManPlaceBlockGoal = false;
106106

107+
@Rule(
108+
desc = "Disable nether portal spawn zombified pigin",
109+
category = {RuleCategory.OPTIMIZATION, RuleCategory.FEATURE}
110+
)
111+
public static boolean disabledNetherPortalSpawn = false;
107112
}
Lines changed: 11 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,28 @@
11
package io.github.optijava.opt_carpet_addition.mixins.disabledEnderManPickupGoal;
22

33
import io.github.optijava.opt_carpet_addition.OptCarpetSettings;
4-
import net.minecraft.block.Block;
5-
import net.minecraft.block.BlockState;
64
import net.minecraft.entity.mob.EndermanEntity;
7-
import net.minecraft.tag.BlockTags;
8-
import net.minecraft.util.hit.BlockHitResult;
9-
import net.minecraft.util.math.BlockPos;
10-
import net.minecraft.util.math.MathHelper;
11-
import net.minecraft.util.math.Vec3d;
12-
import net.minecraft.world.RaycastContext;
13-
import net.minecraft.world.World;
145
import org.spongepowered.asm.mixin.Mixin;
15-
import org.spongepowered.asm.mixin.Overwrite;
16-
import org.spongepowered.asm.mixin.Shadow;
17-
18-
import java.util.Random;
6+
import org.spongepowered.asm.mixin.injection.At;
7+
import org.spongepowered.asm.mixin.injection.Inject;
8+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
199

2010
@Mixin(EndermanEntity.PickUpBlockGoal.class)
2111
public class EnderManEntity_Mixin {
22-
@Shadow
23-
EndermanEntity enderman;
24-
2512
/**
2613
* Mixin EndermanEntity.PickUpBlockGoal.tick()V
2714
*
2815
* @author OptiJava
2916
* @reason rule: disabledEnderManPickupGoal
3017
*/
31-
@Overwrite
32-
public void tick() {
33-
if (!OptCarpetSettings.disabledEnderManPickupGoal) {
34-
Random random = this.enderman.getRandom();
35-
World world = this.enderman.world;
36-
int i = MathHelper.floor(this.enderman.getX() - 2.0 + random.nextDouble() * 4.0);
37-
int j = MathHelper.floor(this.enderman.getY() + random.nextDouble() * 3.0);
38-
int k = MathHelper.floor(this.enderman.getZ() - 2.0 + random.nextDouble() * 4.0);
39-
BlockPos blockPos = new BlockPos(i, j, k);
40-
BlockState blockState = world.getBlockState(blockPos);
41-
Block block = blockState.getBlock();
42-
Vec3d vec3d = new Vec3d((double) MathHelper.floor(this.enderman.getX()) + 0.5, (double) j + 0.5, (double) MathHelper.floor(this.enderman.getZ()) + 0.5);
43-
Vec3d vec3d2 = new Vec3d((double) i + 0.5, (double) j + 0.5, (double) k + 0.5);
44-
BlockHitResult blockHitResult = world.raycast(new RaycastContext(vec3d, vec3d2, RaycastContext.ShapeType.OUTLINE, RaycastContext.FluidHandling.NONE, this.enderman));
45-
boolean bl = blockHitResult.getBlockPos().equals(blockPos);
46-
if (block.isIn(BlockTags.ENDERMAN_HOLDABLE) && bl) {
47-
world.removeBlock(blockPos, false);
48-
this.enderman.setCarriedBlock(blockState.getBlock().getDefaultState());
49-
}
18+
@Inject(
19+
method = "tick()V",
20+
at = @At("HEAD"),
21+
cancellable = true
22+
)
23+
public void injectTick(CallbackInfo ci) {
24+
if (OptCarpetSettings.disabledEnderManPickupGoal) {
25+
ci.cancel();
5026
}
5127
}
5228
}
Lines changed: 11 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,28 @@
11
package io.github.optijava.opt_carpet_addition.mixins.disabledEnderManPlaceBlockGoal;
22

33
import io.github.optijava.opt_carpet_addition.OptCarpetSettings;
4-
import net.minecraft.block.Block;
5-
import net.minecraft.block.BlockState;
6-
import net.minecraft.block.Blocks;
74
import net.minecraft.entity.mob.EndermanEntity;
8-
import net.minecraft.util.math.BlockPos;
9-
import net.minecraft.util.math.Box;
10-
import net.minecraft.util.math.MathHelper;
11-
import net.minecraft.util.math.Vec3d;
12-
import net.minecraft.world.World;
135
import org.spongepowered.asm.mixin.Mixin;
14-
import org.spongepowered.asm.mixin.Overwrite;
15-
import org.spongepowered.asm.mixin.Shadow;
16-
17-
import java.util.Random;
6+
import org.spongepowered.asm.mixin.injection.At;
7+
import org.spongepowered.asm.mixin.injection.Inject;
8+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
189

1910
@Mixin(EndermanEntity.PlaceBlockGoal.class)
2011
public class EndermanEntity_Mixin {
21-
22-
private boolean canPlaceOn(World world, BlockPos posAbove, BlockState carriedState, BlockState stateAbove, BlockState state, BlockPos pos) {
23-
return stateAbove.isAir() && !state.isAir() && !state.isOf(Blocks.BEDROCK) && state.isFullCube(world, pos) && carriedState.canPlaceAt(world, posAbove) && world.getOtherEntities(this.enderman, Box.method_29968(Vec3d.of(posAbove))).isEmpty();
24-
}
25-
26-
@Shadow
27-
EndermanEntity enderman;
28-
2912
/**
3013
* Mixin EndermanEntity.PlaceBlockGoal.tick()V
3114
*
3215
* @author OptiJava
3316
* @reason rule: disabledEnderManPlaceBlockGoal
3417
*/
35-
@Overwrite
36-
public void tick() {
37-
if (!OptCarpetSettings.disabledEnderManPlaceBlockGoal) {
38-
Random random = this.enderman.getRandom();
39-
World world = this.enderman.world;
40-
int i = MathHelper.floor(this.enderman.getX() - 1.0 + random.nextDouble() * 2.0);
41-
int j = MathHelper.floor(this.enderman.getY() + random.nextDouble() * 2.0);
42-
int k = MathHelper.floor(this.enderman.getZ() - 1.0 + random.nextDouble() * 2.0);
43-
BlockPos blockPos = new BlockPos(i, j, k);
44-
BlockState blockState = world.getBlockState(blockPos);
45-
BlockPos blockPos2 = blockPos.down();
46-
BlockState blockState2 = world.getBlockState(blockPos2);
47-
BlockState blockState3 = this.enderman.getCarriedBlock();
48-
if (blockState3 != null) {
49-
blockState3 = Block.postProcessState(blockState3, this.enderman.world, blockPos);
50-
if (this.canPlaceOn(world, blockPos, blockState3, blockState, blockState2, blockPos2)) {
51-
world.setBlockState(blockPos, blockState3, 3);
52-
this.enderman.setCarriedBlock((BlockState) null);
53-
}
54-
}
18+
@Inject(
19+
at = @At("HEAD"),
20+
method = "tick()V",
21+
cancellable = true
22+
)
23+
public void injectTick(CallbackInfo ci) {
24+
if (OptCarpetSettings.disabledEnderManPlaceBlockGoal) {
25+
ci.cancel();
5526
}
5627
}
5728
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package io.github.optijava.opt_carpet_addition.mixins.disabledNetherPortalSpawn;
2+
3+
import io.github.optijava.opt_carpet_addition.OptCarpetSettings;
4+
import net.minecraft.block.NetherPortalBlock;
5+
import org.spongepowered.asm.mixin.Mixin;
6+
import org.spongepowered.asm.mixin.injection.At;
7+
import org.spongepowered.asm.mixin.injection.Inject;
8+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
9+
10+
@Mixin(NetherPortalBlock.class)
11+
public class NetherPortalBlock_Mixin {
12+
/**
13+
* Mixin NetherPortalBlock.randomTick(Lnet/minecraft/block/BlockState;Lnet/minecraft/server/world/ServerWorld;Lnet/minecraft/util/math/BlockPos;Ljava.util.Random;)V
14+
*
15+
* @author OptiJava
16+
* @reason rule: disabledNetherPortalSpawn
17+
*/
18+
@Inject(
19+
at = @At("HEAD"),
20+
method = "randomTick(Lnet/minecraft/block/BlockState;Lnet/minecraft/server/world/ServerWorld;Lnet/minecraft/util/math/BlockPos;Ljava.util.Random;)V",
21+
cancellable = true
22+
)
23+
public void injectRandomTick(CallbackInfo ci) {
24+
if (OptCarpetSettings.disabledNetherPortalSpawn) {
25+
ci.cancel();
26+
}
27+
}
28+
}

src/main/resources/opt-carpet-addition.mixins.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
"mixins": [
77
"disabledLayEggs.ChickenEntity_Mixin",
88
"disabledEnderManPickupGoal.EnderManEntity_Mixin",
9-
"disabledEnderManPlaceBlockGoal.EndermanEntity_Mixin"
9+
"disabledEnderManPlaceBlockGoal.EndermanEntity_Mixin",
10+
"disabledNetherPortalSpawn.NetherPortalBlock_Mixin"
1011
],
1112
"client": [
1213
],

0 commit comments

Comments
 (0)