forked from BRNSystems/tweaks
feat: ender eye break chance is a gamerule
This commit is contained in:
@@ -27,6 +27,9 @@ public class Tweaks implements ModInitializer {
|
||||
public static final GameRules.Key<GameRules.IntRule> ENDER_PEARL_DIVERGENCE =
|
||||
GameRuleRegistry.register("enderPearlDivergence", GameRules.Category.PLAYER, GameRuleFactory.createIntRule(100, 0, Integer.MAX_VALUE));
|
||||
|
||||
public static final GameRules.Key<GameRules.IntRule> ENDER_EYE_POP_CHANCE =
|
||||
GameRuleRegistry.register("enderEyePopChance", GameRules.Category.PLAYER, GameRuleFactory.createIntRule(20, 0, 100));
|
||||
|
||||
@Override
|
||||
public void onInitialize() {
|
||||
}
|
||||
|
||||
39
src/main/java/systems/brn/tweaks/mixin/EyeOfEnderMixin.java
Normal file
39
src/main/java/systems/brn/tweaks/mixin/EyeOfEnderMixin.java
Normal file
@@ -0,0 +1,39 @@
|
||||
package systems.brn.tweaks.mixin;
|
||||
|
||||
import net.minecraft.entity.EyeOfEnderEntity;
|
||||
import net.minecraft.server.world.ServerWorld;
|
||||
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.CallbackInfo;
|
||||
import systems.brn.tweaks.Tweaks;
|
||||
import systems.brn.tweaks.mixin.accessors.EyeOfEnderEntityAccessor;
|
||||
|
||||
@Mixin(EyeOfEnderEntity.class)
|
||||
public class EyeOfEnderMixin {
|
||||
|
||||
@Inject(
|
||||
method = "initTargetPos",
|
||||
at = @At(
|
||||
value = "FIELD",
|
||||
target = "Lnet/minecraft/entity/EyeOfEnderEntity;dropsItem:Z",
|
||||
ordinal = 0,
|
||||
shift = At.Shift.AFTER
|
||||
)
|
||||
)
|
||||
private void applyCustomBreakChance(CallbackInfo ci) {
|
||||
EyeOfEnderEntity self = (EyeOfEnderEntity)(Object)this;
|
||||
World world = self.getWorld();
|
||||
|
||||
if (!(world instanceof ServerWorld serverWorld))
|
||||
return;
|
||||
|
||||
int popChance = serverWorld.getGameRules().getInt(Tweaks.ENDER_EYE_POP_CHANCE);
|
||||
int roll = self.getRandom().nextInt(100);
|
||||
|
||||
boolean dropsItem = roll >= popChance;
|
||||
|
||||
((EyeOfEnderEntityAccessor) self).setDropsItem(dropsItem);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package systems.brn.tweaks.mixin.accessors;
|
||||
|
||||
import net.minecraft.entity.EyeOfEnderEntity;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
|
||||
@Mixin(EyeOfEnderEntity.class)
|
||||
public interface EyeOfEnderEntityAccessor {
|
||||
@Accessor("dropsItem")
|
||||
void setDropsItem(boolean value);
|
||||
}
|
||||
@@ -7,9 +7,11 @@
|
||||
"CreeperEntityMixin",
|
||||
"DontHurtMePearlMixin",
|
||||
"EnderPearlItemMixin",
|
||||
"EyeOfEnderMixin",
|
||||
"JustTeleportAlreadyMixin",
|
||||
"PlayerEntityMixin",
|
||||
"accessors.CreeperEntityAccessor"
|
||||
"accessors.CreeperEntityAccessor",
|
||||
"accessors.EyeOfEnderEntityAccessor"
|
||||
],
|
||||
"injectors": {
|
||||
"defaultRequire": 1
|
||||
|
||||
Reference in New Issue
Block a user