Skip to content

Commit aa43e38

Browse files
committed
feat: @e/@n prevention & disable trampling
1 parent 88b3352 commit aa43e38

File tree

16 files changed

+191
-16
lines changed

16 files changed

+191
-16
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package net.modgarden.flowerbed.duck;
2+
3+
public interface Duck_ExtESP {
4+
String CONFIRMATION = "i_understand_the_consequences_of_my_actions";
5+
6+
boolean flowerbed$theUserUnderstandsTheConsequencesOfTheirActions();
7+
8+
void flowerbed$setTheUserUnderstandsTheConsequencesOfTheirActions(boolean theUserUnderstandsTheConsequencesOfTheirActions);
9+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package net.modgarden.flowerbed.mixin.showcase.griefing;
2+
3+
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
4+
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
5+
import net.minecraft.core.BlockPos;
6+
import net.minecraft.world.entity.Entity;
7+
import net.minecraft.world.level.Level;
8+
import net.minecraft.world.level.block.FarmBlock;
9+
import net.minecraft.world.level.block.state.BlockState;
10+
import net.modgarden.flowerbed.annotation.PatchMetadata;
11+
import org.spongepowered.asm.mixin.Mixin;
12+
import org.spongepowered.asm.mixin.injection.At;
13+
14+
@PatchMetadata(
15+
id = "dont_trample_crops",
16+
description = "Don't allow players and entities to trample crops."
17+
)
18+
@Mixin(FarmBlock.class)
19+
public class Mixin_FarmBlock {
20+
@WrapOperation(
21+
method = "fallOn",
22+
at = @At(
23+
value = "INVOKE",
24+
target = "Lnet/minecraft/world/level/block/FarmBlock;turnToDirt(Lnet/minecraft/world/entity/Entity;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;)V"
25+
)
26+
)
27+
private void flowerbed$preventTrampling(
28+
Entity entity,
29+
BlockState state,
30+
Level level,
31+
BlockPos pos,
32+
Operation<Void> original
33+
) {
34+
// no
35+
}
36+
}

src/main/java/net/modgarden/flowerbed/mixin/showcase/spawning/invulnerability/Mixin_ArmorStandItem.java renamed to src/main/java/net/modgarden/flowerbed/mixin/showcase/griefing/invulnerability/Mixin_ArmorStandItem.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package net.modgarden.flowerbed.mixin.showcase.spawning.invulnerability;
1+
package net.modgarden.flowerbed.mixin.showcase.griefing.invulnerability;
22

33
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
44
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;

src/main/java/net/modgarden/flowerbed/mixin/showcase/spawning/invulnerability/Mixin_BoatItem.java renamed to src/main/java/net/modgarden/flowerbed/mixin/showcase/griefing/invulnerability/Mixin_BoatItem.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package net.modgarden.flowerbed.mixin.showcase.spawning.invulnerability;
1+
package net.modgarden.flowerbed.mixin.showcase.griefing.invulnerability;
22

33
import com.llamalad7.mixinextras.sugar.Local;
44
import net.minecraft.world.entity.player.Player;

src/main/java/net/modgarden/flowerbed/mixin/showcase/spawning/invulnerability/Mixin_HangingEntityItem.java renamed to src/main/java/net/modgarden/flowerbed/mixin/showcase/griefing/invulnerability/Mixin_HangingEntityItem.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package net.modgarden.flowerbed.mixin.showcase.spawning.invulnerability;
1+
package net.modgarden.flowerbed.mixin.showcase.griefing.invulnerability;
22

33
import com.llamalad7.mixinextras.sugar.Local;
44
import net.minecraft.world.InteractionResult;

src/main/java/net/modgarden/flowerbed/mixin/showcase/spawning/invulnerability/Mixin_SpawnEggItem.java renamed to src/main/java/net/modgarden/flowerbed/mixin/showcase/griefing/invulnerability/Mixin_SpawnEggItem.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package net.modgarden.flowerbed.mixin.showcase.spawning.invulnerability;
1+
package net.modgarden.flowerbed.mixin.showcase.griefing.invulnerability;
22

33
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
44
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;

src/main/java/net/modgarden/flowerbed/mixin/showcase/spawning/invulnerability/Mixin_SummonCommand.java renamed to src/main/java/net/modgarden/flowerbed/mixin/showcase/griefing/invulnerability/Mixin_SummonCommand.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package net.modgarden.flowerbed.mixin.showcase.spawning.invulnerability;
1+
package net.modgarden.flowerbed.mixin.showcase.griefing.invulnerability;
22

33
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
44
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;

src/main/java/net/modgarden/flowerbed/mixin/showcase/spawning/invulnerability/package-info.java renamed to src/main/java/net/modgarden/flowerbed/mixin/showcase/griefing/invulnerability/package-info.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@
22
id = "invulnerability",
33
description = "Patches that apply invulnerability to manually spawned entities."
44
)
5-
package net.modgarden.flowerbed.mixin.showcase.spawning.invulnerability;
5+
package net.modgarden.flowerbed.mixin.showcase.griefing.invulnerability;
66

77
import net.modgarden.flowerbed.annotation.PatchMetadata;
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
@PatchMetadata(
2+
id = "griefing",
3+
description = "Patches to prevent griefing."
4+
)
5+
package net.modgarden.flowerbed.mixin.showcase.griefing;
6+
7+
import net.modgarden.flowerbed.annotation.PatchMetadata;
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package net.modgarden.flowerbed.mixin.showcase.griefing.prevent_modfest_1_20;
2+
3+
import com.llamalad7.mixinextras.sugar.Local;
4+
import com.mojang.brigadier.StringReader;
5+
import com.mojang.brigadier.exceptions.CommandSyntaxException;
6+
import com.mojang.brigadier.exceptions.SimpleCommandExceptionType;
7+
import net.minecraft.commands.arguments.EntityArgument;
8+
import net.minecraft.commands.arguments.selector.EntitySelector;
9+
import net.minecraft.commands.arguments.selector.EntitySelectorParser;
10+
import net.minecraft.network.chat.Component;
11+
import net.modgarden.flowerbed.duck.Duck_ExtESP;
12+
import org.spongepowered.asm.mixin.Mixin;
13+
import org.spongepowered.asm.mixin.Unique;
14+
import org.spongepowered.asm.mixin.injection.At;
15+
import org.spongepowered.asm.mixin.injection.Inject;
16+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
17+
18+
@Mixin(EntityArgument.class)
19+
public class Mixin_EntityArgument {
20+
@Unique
21+
private static final SimpleCommandExceptionType E_NOT_ALLOWED = new SimpleCommandExceptionType(Component.translatable("argument.flowerbed.e_not_allowed"));
22+
23+
@Inject(
24+
method = "parse(Lcom/mojang/brigadier/StringReader;Z)Lnet/minecraft/commands/arguments/selector/EntitySelector;",
25+
at = @At("TAIL")
26+
)
27+
private void flowerbed$preventModfest120(
28+
StringReader reader,
29+
boolean allowSelectors,
30+
CallbackInfoReturnable<EntitySelector> cir,
31+
@Local EntitySelector entitySelector,
32+
@Local EntitySelectorParser entitySelectorParser
33+
) throws CommandSyntaxException {
34+
if (!entitySelector.includesEntities() || entitySelector.isSelfSelector()) return;
35+
36+
boolean unaware = !((Duck_ExtESP) entitySelectorParser)
37+
.flowerbed$theUserUnderstandsTheConsequencesOfTheirActions();
38+
if (unaware) {
39+
throw E_NOT_ALLOWED.createWithContext(reader);
40+
}
41+
}
42+
}

0 commit comments

Comments
 (0)