diff --git a/src/main/java/me/juancarloscp52/entropy/Variables.java b/src/main/java/me/juancarloscp52/entropy/Variables.java index ada7ec8f..9bed8cd1 100644 --- a/src/main/java/me/juancarloscp52/entropy/Variables.java +++ b/src/main/java/me/juancarloscp52/entropy/Variables.java @@ -54,4 +54,5 @@ public class Variables { public static boolean xrayActive = false; public static float cameraRoll = 0f; public static boolean stuttering = false; + public static boolean forceRiding = false; } diff --git a/src/main/java/me/juancarloscp52/entropy/events/EventRegistry.java b/src/main/java/me/juancarloscp52/entropy/events/EventRegistry.java index 920f8146..970bd109 100644 --- a/src/main/java/me/juancarloscp52/entropy/events/EventRegistry.java +++ b/src/main/java/me/juancarloscp52/entropy/events/EventRegistry.java @@ -177,6 +177,7 @@ public static void register() { entropyEvents.put("ConstantInteractingEvent", ConstantInteractingEvent::new); entropyEvents.put("MLGBucketEvent", MLGBucketEvent::new); entropyEvents.put("StutteringEvent", StutteringEvent::new); + entropyEvents.put("ForceHorseRidingEvent", ForceHorseRidingEvent::new); } diff --git a/src/main/java/me/juancarloscp52/entropy/events/db/ForceHorseRidingEvent.java b/src/main/java/me/juancarloscp52/entropy/events/db/ForceHorseRidingEvent.java new file mode 100644 index 00000000..b8f8c131 --- /dev/null +++ b/src/main/java/me/juancarloscp52/entropy/events/db/ForceHorseRidingEvent.java @@ -0,0 +1,56 @@ +package me.juancarloscp52.entropy.events.db; + +import java.util.ArrayList; +import java.util.List; + +import me.juancarloscp52.entropy.Entropy; +import me.juancarloscp52.entropy.Variables; +import me.juancarloscp52.entropy.events.AbstractTimedEvent; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityType; +import net.minecraft.entity.SpawnReason; +import net.minecraft.entity.passive.HorseEntity; +import net.minecraft.sound.SoundCategory; + +public class ForceHorseRidingEvent extends AbstractTimedEvent { + private List spawnedHorses = new ArrayList<>(); + + @Override + public void initClient() { + Variables.forceRiding = true; + } + + @Override + public void init() { + Entropy.getInstance().eventHandler.getActivePlayers().forEach(player -> { + spawnedHorses.add(EntityType.HORSE.spawn(player.getWorld(), null, horse -> { + horse.bondWithPlayer(player); + horse.saddle(SoundCategory.NEUTRAL); + player.startRiding(horse); + }, player.getBlockPos(), SpawnReason.SPAWN_EGG, false, false)); + }); + Variables.forceRiding = true; + } + + @Override + public void endClient() { + super.endClient(); + Variables.forceRiding = false; + } + + @Override + public void end() { + super.end(); + Variables.forceRiding = false; + spawnedHorses.forEach(Entity::discard); + } + + @Override + public void render(MatrixStack matrixStack, float tickdelta) {} + + @Override + public short getDuration() { + return Entropy.getInstance().settings.baseEventDuration; + } +} diff --git a/src/main/java/me/juancarloscp52/entropy/mixin/EntityMixin.java b/src/main/java/me/juancarloscp52/entropy/mixin/EntityMixin.java index 7b6e90de..8f0aa3b9 100644 --- a/src/main/java/me/juancarloscp52/entropy/mixin/EntityMixin.java +++ b/src/main/java/me/juancarloscp52/entropy/mixin/EntityMixin.java @@ -29,6 +29,7 @@ import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(Entity.class) @@ -37,6 +38,9 @@ public abstract class EntityMixin { @Shadow public World world; + @Shadow + private Entity vehicle; + @Shadow public abstract double getX(); @@ -46,6 +50,18 @@ public abstract class EntityMixin { @Shadow public abstract double getZ(); + @Inject(method = "Lnet/minecraft/entity/Entity;startRiding(Lnet/minecraft/entity/Entity;Z)Z", at = @At("HEAD"), cancellable = true) + private void preventMounting(Entity entityToMount, boolean force, CallbackInfoReturnable cir) { + if(Variables.forceRiding && vehicle != null) + cir.setReturnValue(false); + } + + @Inject(method = "dismountVehicle", at = @At("HEAD"), cancellable = true) + private void preventDismounting(CallbackInfo ci) { + if(Variables.forceRiding) + ci.cancel(); + } + @Inject(method = "dropStack(Lnet/minecraft/item/ItemStack;F)Lnet/minecraft/entity/ItemEntity;", at = @At("HEAD"), cancellable = true) private void randomDrops(ItemStack stack, float yOffset, CallbackInfoReturnable cir) { if (Variables.noDrops) { diff --git a/src/main/resources/assets/entropy/lang/de_at.json b/src/main/resources/assets/entropy/lang/de_at.json index 9d3b0646..98ea61ea 100644 --- a/src/main/resources/assets/entropy/lang/de_at.json +++ b/src/main/resources/assets/entropy/lang/de_at.json @@ -141,6 +141,7 @@ "entropy.events.ConstantInteractingEvent": "Ich kann nicht aufhören zu interagieren!", "entropy.events.MLGBucketEvent": "MLG-Wassereimer", "entropy.events.StutteringEvent": "Gestotter", + "entropy.events.ForceHorseRidingEvent": "Es ist Zeit zum Pferdereiten!", "entropy.title": "Entropy: Chaos Mod", "entropy.errorScreen.title": "Entropy Fehler", diff --git a/src/main/resources/assets/entropy/lang/de_ch.json b/src/main/resources/assets/entropy/lang/de_ch.json index c17ca32f..3b4b13ba 100644 --- a/src/main/resources/assets/entropy/lang/de_ch.json +++ b/src/main/resources/assets/entropy/lang/de_ch.json @@ -141,6 +141,7 @@ "entropy.events.ConstantInteractingEvent": "Ich kann nicht aufhören zu interagieren!", "entropy.events.MLGBucketEvent": "MLG-Wassereimer", "entropy.events.StutteringEvent": "Gestotter", + "entropy.events.ForceHorseRidingEvent": "Es ist Zeit zum Pferdereiten!", "entropy.title": "Entropy: Chaos Mod", "entropy.errorScreen.title": "Entropy Fehler", diff --git a/src/main/resources/assets/entropy/lang/de_de.json b/src/main/resources/assets/entropy/lang/de_de.json index c17ca32f..3b4b13ba 100644 --- a/src/main/resources/assets/entropy/lang/de_de.json +++ b/src/main/resources/assets/entropy/lang/de_de.json @@ -141,6 +141,7 @@ "entropy.events.ConstantInteractingEvent": "Ich kann nicht aufhören zu interagieren!", "entropy.events.MLGBucketEvent": "MLG-Wassereimer", "entropy.events.StutteringEvent": "Gestotter", + "entropy.events.ForceHorseRidingEvent": "Es ist Zeit zum Pferdereiten!", "entropy.title": "Entropy: Chaos Mod", "entropy.errorScreen.title": "Entropy Fehler", diff --git a/src/main/resources/assets/entropy/lang/en_gb.json b/src/main/resources/assets/entropy/lang/en_gb.json index 88c7fa6c..1036f363 100644 --- a/src/main/resources/assets/entropy/lang/en_gb.json +++ b/src/main/resources/assets/entropy/lang/en_gb.json @@ -120,6 +120,7 @@ "entropy.events.ConstantInteractingEvent": "I can't stop interacting!", "entropy.events.MLGBucketEvent": "MLG water bucket", "entropy.events.StutteringEvent": "Stuttering", + "entropy.events.ForceHorseRidingEvent": "It's horse riding time!", "entropy.title": "Entropy: Chaos Mod", "entropy.errorScreen.title": "Entropy Error", diff --git a/src/main/resources/assets/entropy/lang/en_us.json b/src/main/resources/assets/entropy/lang/en_us.json index 88351267..c7256300 100644 --- a/src/main/resources/assets/entropy/lang/en_us.json +++ b/src/main/resources/assets/entropy/lang/en_us.json @@ -143,6 +143,7 @@ "entropy.events.ConstantInteractingEvent": "I can't stop interacting!", "entropy.events.MLGBucketEvent": "MLG Water Bucket", "entropy.events.StutteringEvent": "Stuttering", + "entropy.events.ForceHorseRidingEvent": "It's Horse Riding Time!", "entropy.title": "Entropy: Chaos Mod", "entropy.errorScreen.title": "Entropy Error", diff --git a/src/main/resources/assets/entropy/lang/es_es.json b/src/main/resources/assets/entropy/lang/es_es.json index db28abda..650e9604 100644 --- a/src/main/resources/assets/entropy/lang/es_es.json +++ b/src/main/resources/assets/entropy/lang/es_es.json @@ -142,6 +142,7 @@ "entropy.events.NoUseKeyEvent": "Prohibido interactuar", "entropy.events.ConstantInteractingEvent": "¡No puedo dejar de interactuar!", "entropy.events.MLGBucketEvent": "Caída en agua (waterdrop)", + "entropy.events.ForceHorseRidingEvent": "¡Hora de montar a caballo!", "entropy.title": "Entropy: Chaos Mod", "entropy.errorScreen.title": "Entropy error",