diff --git a/src/main/java/carpet/CarpetServer.java b/src/main/java/carpet/CarpetServer.java index 92a046e4..390e78f0 100644 --- a/src/main/java/carpet/CarpetServer.java +++ b/src/main/java/carpet/CarpetServer.java @@ -30,7 +30,7 @@ import net.minecraft.server.network.ServerPlayerEntity; public class CarpetServer // static for now - easier to handle all around the code, its one anyways { - public static final Random rand = new Random((int)((2>>16)*Math.random())); + public static final Random rand = new Random(); public static MinecraftServer minecraft_server; private static CommandDispatcher currentCommandDispatcher; public static CarpetScriptServer scriptServer; diff --git a/src/main/java/carpet/CarpetSettings.java b/src/main/java/carpet/CarpetSettings.java index 1135f9ad..50583395 100644 --- a/src/main/java/carpet/CarpetSettings.java +++ b/src/main/java/carpet/CarpetSettings.java @@ -508,4 +508,11 @@ public class CarpetSettings category = {EXPERIMENTAL, CREATIVE} ) public static boolean flatWorldStructureSpawning = false; + + @Rule( + desc = "Edge cases are as frequent as common cases, for testing only!!", + extra = "Dispensers and Droppers will use extreme random velocity values", + category = CREATIVE + ) + public static boolean extremeBehaviours = false; } diff --git a/src/main/java/carpet/mixins/ItemDispenserBehaviour_extremeBehavioursMixin.java b/src/main/java/carpet/mixins/ItemDispenserBehaviour_extremeBehavioursMixin.java new file mode 100644 index 00000000..6b723470 --- /dev/null +++ b/src/main/java/carpet/mixins/ItemDispenserBehaviour_extremeBehavioursMixin.java @@ -0,0 +1,40 @@ +package carpet.mixins; + +import carpet.CarpetServer; +import carpet.CarpetSettings; +import net.minecraft.block.dispenser.ItemDispenserBehavior; +import net.minecraft.entity.ItemEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.Direction; +import net.minecraft.util.math.Position; +import net.minecraft.world.World; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +@Mixin(ItemDispenserBehavior.class) +public class ItemDispenserBehaviour_extremeBehavioursMixin +{ + @Redirect(method = "spawnItem", at = @At( + value = "INVOKE", + target = "Lnet/minecraft/entity/ItemEntity;setVelocity(DDD)V" + )) + private static void setExtremeVelocity(ItemEntity itemEntity, double x, double y, double z, + World world, ItemStack stack, int offset, Direction side, Position pos) + { + if (CarpetSettings.extremeBehaviours) + { + double g = CarpetServer.rand.nextDouble() * 0.1D + 0.2D; + itemEntity.setVelocity( + (16*world.random.nextDouble()-8) * 0.007499999832361937D * (double) offset + (double) side.getOffsetX() * g, + (16*world.random.nextDouble()-8) * 0.007499999832361937D * (double) offset + 0.20000000298023224D, + (16*world.random.nextDouble()-8) * 0.007499999832361937D * (double) offset + (double) side.getOffsetZ() * g + ); + } + else + { + itemEntity.setVelocity(x, y, z); + } + } + +} diff --git a/src/main/resources/carpet.mixins.json b/src/main/resources/carpet.mixins.json index f94bfa25..aef2ba6b 100644 --- a/src/main/resources/carpet.mixins.json +++ b/src/main/resources/carpet.mixins.json @@ -123,6 +123,8 @@ "PickaxeItem_missingToolsMixin", "ShearsItem_missingToolsMixin", + "ItemDispenserBehaviour_extremeBehavioursMixin", + "ArmorStandEntity_scarpetMarkerMixin", "Entity_scarpetEventsMixin", "LivingEntity_scarpetEventsMixin",