Skip to content

Commit 398c7f3

Browse files
committed
Update to 1.20.4, move some redirects to wrapoperation
1 parent e7d0733 commit 398c7f3

14 files changed

+104
-62
lines changed

build.gradle

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
plugins {
2-
id 'fabric-loom' version '1.1.+'
2+
id 'fabric-loom' version '1.4.+'
33
id 'maven-publish'
44
}
55

@@ -22,8 +22,6 @@ dependencies {
2222
modImplementation "net.fabricmc:fabric-loader:${project.loader_version}"
2323

2424
modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"
25-
26-
implementation(include(annotationProcessor("com.llamalad7.mixinextras:mixinextras-fabric:${project.mixin_extras_version}")))
2725
}
2826

2927
processResources {
@@ -37,12 +35,9 @@ processResources {
3735
tasks.withType(JavaCompile) {
3836
options.encoding = "UTF-8"
3937
}
40-
41-
task sourcesJar(type: Jar, dependsOn: classes) {
42-
classifier = "sources"
43-
from sourceSets.main.allSource
38+
java {
39+
withSourcesJar()
4440
}
45-
4641
jar {
4742
from "LICENSE"
4843
}

gradle.properties

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,14 @@
11
# Done to increase the memory available to gradle.
22
org.gradle.jvmargs=-Xmx1G
33

4-
minecraft_version=1.20.2
5-
yarn_mappings=1.20.2+build.1
6-
loader_version=0.14.22
4+
minecraft_version=1.20.4
5+
yarn_mappings=1.20.4+build.1
6+
loader_version=0.15.0
77

88
#Fabric api
9-
fabric_version=0.89.0+1.20.2
10-
11-
mixin_extras_version=0.2.0-beta.9
9+
fabric_version=0.91.1+1.20.4
1210

1311
# Mod Properties
14-
mod_version=0.4.9
12+
mod_version=0.4.10
1513
maven_group=xyz.nucleoid
1614
archives_base_name=stimuli
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
3-
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip
44
networkTimeout=10000
55
zipStoreBase=GRADLE_USER_HOME
66
zipStorePath=wrapper/dists

src/main/java/xyz/nucleoid/stimuli/mixin/entity/LivingEntityMixin.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package xyz.nucleoid.stimuli.mixin.entity;
22

3+
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
4+
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
35
import net.minecraft.entity.Entity;
46
import net.minecraft.entity.EntityType;
57
import net.minecraft.entity.LivingEntity;
@@ -62,21 +64,21 @@ private void callDeathListener(DamageSource source, CallbackInfo ci) {
6264
}
6365
}
6466

65-
@Redirect(method = "dropLoot", at = @At(value = "INVOKE", target = "Lnet/minecraft/loot/LootTable;generateLoot(Lnet/minecraft/loot/context/LootContextParameterSet;JLjava/util/function/Consumer;)V"))
66-
private void modifyDroppedLoot(LootTable lootTable, LootContextParameterSet parameters, long seed, Consumer<ItemStack> lootConsumer) {
67+
@WrapOperation(method = "dropLoot", at = @At(value = "INVOKE", target = "Lnet/minecraft/loot/LootTable;generateLoot(Lnet/minecraft/loot/context/LootContextParameterSet;JLjava/util/function/Consumer;)V"))
68+
private void modifyDroppedLoot(LootTable instance, LootContextParameterSet parameters, long seed, Consumer<ItemStack> lootConsumer, Operation<Void> original) {
6769
if (this.getWorld().isClient) {
68-
lootTable.generateLoot(parameters, lootConsumer);
70+
original.call(instance, parameters, seed, lootConsumer);
6971
return;
7072
}
7173

7274
try (var invokers = Stimuli.select().forEntity(this)) {
73-
var droppedStacks = lootTable.generateLoot(parameters, seed);
75+
var droppedStacks = instance.generateLoot(parameters, seed);
7476

7577
var result = invokers.get(EntityDropItemsEvent.EVENT)
7678
.onDropItems((LivingEntity) (Object) this, droppedStacks);
7779

7880
if (result.getResult() != ActionResult.FAIL) {
79-
result.getValue().forEach(this::dropStack);
81+
result.getValue().forEach(lootConsumer);
8082
}
8183
}
8284
}

src/main/java/xyz/nucleoid/stimuli/mixin/entity/ShearsDispenserBehaviorMixin.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package xyz.nucleoid.stimuli.mixin.entity;
22

3+
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
4+
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
5+
import com.llamalad7.mixinextras.sugar.Local;
36
import org.spongepowered.asm.mixin.Mixin;
47
import org.spongepowered.asm.mixin.injection.At;
58
import org.spongepowered.asm.mixin.injection.Redirect;
@@ -15,15 +18,15 @@
1518

1619
@Mixin(ShearsDispenserBehavior.class)
1720
public class ShearsDispenserBehaviorMixin {
18-
@Redirect(
21+
@WrapOperation(
1922
method = "tryShearEntity",
2023
at = @At(
2124
value = "INVOKE",
2225
target = "Lnet/minecraft/entity/Shearable;isShearable()Z"
2326
)
2427
)
25-
private static boolean onEntityShear(Shearable shearable, ServerWorld world, BlockPos pos) {
26-
if (!shearable.isShearable()) {
28+
private static boolean onEntityShear(Shearable shearable, Operation<Boolean> original, @Local BlockPos pos) {
29+
if (!original.call(shearable)) {
2730
return false;
2831
}
2932

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package xyz.nucleoid.stimuli.mixin.world;
2+
3+
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
4+
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
5+
import com.llamalad7.mixinextras.sugar.Local;
6+
import net.minecraft.block.AbstractBlock;
7+
import net.minecraft.block.BlockState;
8+
import net.minecraft.item.ItemStack;
9+
import net.minecraft.loot.context.LootContextParameterSet;
10+
import net.minecraft.server.world.ServerWorld;
11+
import net.minecraft.util.ActionResult;
12+
import net.minecraft.util.math.BlockPos;
13+
import net.minecraft.world.World;
14+
import net.minecraft.world.explosion.Explosion;
15+
import org.spongepowered.asm.mixin.Mixin;
16+
import org.spongepowered.asm.mixin.injection.At;
17+
import xyz.nucleoid.stimuli.Stimuli;
18+
import xyz.nucleoid.stimuli.event.block.BlockDropItemsEvent;
19+
20+
import java.util.Collections;
21+
import java.util.List;
22+
23+
@Mixin(AbstractBlock.class)
24+
public class AbstractBlockMixin {
25+
@WrapOperation(
26+
method = "onExploded",
27+
at = @At(
28+
value = "INVOKE",
29+
target = "Lnet/minecraft/block/BlockState;getDroppedStacks(Lnet/minecraft/loot/context/LootContextParameterSet$Builder;)Ljava/util/List;"
30+
)
31+
)
32+
private List<ItemStack> stimuli_dropBlock(BlockState state, LootContextParameterSet.Builder builder, Operation<List<ItemStack>> operation,
33+
@Local Explosion explosion, @Local World world) {
34+
var events = Stimuli.select();
35+
final var entity = explosion.getEntity();
36+
37+
var pos = entity != null ? entity.getBlockPos() : BlockPos.ofFloored(explosion.getPosition());
38+
try (var invokers = entity != null ? events.forEntityAt(entity, pos) : events.at(world, pos)) {
39+
var result = invokers.get(BlockDropItemsEvent.EVENT)
40+
.onDropItems(entity, (ServerWorld) world, pos, state, operation.call(state, builder));
41+
42+
if (result.getResult() != ActionResult.FAIL) {
43+
return result.getValue();
44+
} else {
45+
return Collections.emptyList();
46+
}
47+
}
48+
}
49+
}

src/main/java/xyz/nucleoid/stimuli/mixin/world/AbstractBlockStateMixin.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package xyz.nucleoid.stimuli.mixin.world;
22

3+
import com.llamalad7.mixinextras.injector.WrapWithCondition;
34
import net.minecraft.block.AbstractBlock;
45
import net.minecraft.block.Block;
56
import net.minecraft.block.BlockState;
@@ -15,14 +16,15 @@
1516

1617
@Mixin(AbstractBlock.AbstractBlockState.class)
1718
public class AbstractBlockStateMixin {
18-
@Redirect(method = "randomTick", at = @At(value = "INVOKE", target = "Lnet/minecraft/block/Block;randomTick(Lnet/minecraft/block/BlockState;Lnet/minecraft/server/world/ServerWorld;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/util/math/random/Random;)V"))
19-
private void applyBlockRandomTickEvent(Block block, BlockState state, ServerWorld world, BlockPos pos, net.minecraft.util.math.random.Random random) {
19+
@WrapWithCondition(method = "randomTick", at = @At(value = "INVOKE", target = "Lnet/minecraft/block/Block;randomTick(Lnet/minecraft/block/BlockState;Lnet/minecraft/server/world/ServerWorld;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/util/math/random/Random;)V"))
20+
private boolean applyBlockRandomTickEvent(Block block, BlockState state, ServerWorld world, BlockPos pos, net.minecraft.util.math.random.Random random) {
2021
try (var invokers = Stimuli.select().at(world, pos)) {
2122
var result = invokers.get(BlockRandomTickEvent.EVENT).onBlockRandomTick(world, pos, state);
2223
if (result == ActionResult.FAIL) {
23-
return;
24+
return false;
2425
}
2526
}
2627

27-
block.randomTick(state, world, pos, random);
28-
}}
28+
return true;
29+
}
30+
}

src/main/java/xyz/nucleoid/stimuli/mixin/world/EnderEyeItemMixin.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
package xyz.nucleoid.stimuli.mixin.world;
22

3+
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
4+
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
5+
import com.llamalad7.mixinextras.sugar.Local;
36
import net.minecraft.block.pattern.BlockPattern;
47
import net.minecraft.item.EnderEyeItem;
58
import net.minecraft.item.ItemUsageContext;
69
import net.minecraft.util.ActionResult;
710
import net.minecraft.util.math.BlockPos;
11+
import net.minecraft.world.World;
812
import net.minecraft.world.WorldView;
913
import org.spongepowered.asm.mixin.Mixin;
1014
import org.spongepowered.asm.mixin.injection.At;
@@ -14,9 +18,9 @@
1418

1519
@Mixin(EnderEyeItem.class)
1620
public class EnderEyeItemMixin {
17-
@Redirect(method = "useOnBlock", at = @At(value = "INVOKE", target = "Lnet/minecraft/block/pattern/BlockPattern;searchAround(Lnet/minecraft/world/WorldView;Lnet/minecraft/util/math/BlockPos;)Lnet/minecraft/block/pattern/BlockPattern$Result;"))
18-
private BlockPattern.Result searchAround(BlockPattern pattern, WorldView patternWorld, BlockPos pos, ItemUsageContext context) {
19-
var patternResult = pattern.searchAround(patternWorld, pos);
21+
@WrapOperation(method = "useOnBlock", at = @At(value = "INVOKE", target = "Lnet/minecraft/block/pattern/BlockPattern;searchAround(Lnet/minecraft/world/WorldView;Lnet/minecraft/util/math/BlockPos;)Lnet/minecraft/block/pattern/BlockPattern$Result;"))
22+
private BlockPattern.Result searchAround(BlockPattern instance, WorldView worldView, BlockPos pos, Operation<BlockPattern.Result> original, @Local ItemUsageContext context) {
23+
var patternResult = original.call(instance, worldView, pos);
2024

2125
var world = context.getWorld();
2226
try (var invokers = Stimuli.select().at(world, pos)) {
@@ -26,6 +30,7 @@ private BlockPattern.Result searchAround(BlockPattern pattern, WorldView pattern
2630
}
2731
}
2832

33+
2934
return patternResult;
3035
}
3136
}

src/main/java/xyz/nucleoid/stimuli/mixin/world/ExplosionMixin.java

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -45,23 +45,4 @@ private void affectWorld(boolean particles, CallbackInfo ci) {
4545
}
4646
}
4747
}
48-
49-
@Redirect(method = "affectWorld", at = @At(value = "INVOKE", target = "Lnet/minecraft/block/BlockState;getDroppedStacks(Lnet/minecraft/loot/context/LootContextParameterSet$Builder;)Ljava/util/List;"))
50-
private List<ItemStack> stimuli_dropBlock(BlockState state, LootContextParameterSet.Builder builder) {
51-
var stacks = state.getDroppedStacks(builder);
52-
53-
var events = Stimuli.select();
54-
55-
var pos = this.entity != null ? this.entity.getBlockPos() : BlockPos.ofFloored(this.x, this.y, this.z);
56-
try (var invokers = this.entity != null ? events.forEntityAt(this.entity, pos) : events.at(world, pos)) {
57-
var result = invokers.get(BlockDropItemsEvent.EVENT)
58-
.onDropItems(entity, (ServerWorld) world, pos, state, stacks);
59-
60-
if (result.getResult() != ActionResult.FAIL) {
61-
return result.getValue();
62-
} else {
63-
return Collections.emptyList();
64-
}
65-
}
66-
}
6748
}

src/main/java/xyz/nucleoid/stimuli/mixin/world/FireBlockMixin.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package xyz.nucleoid.stimuli.mixin.world;
22

3+
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
4+
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
5+
import com.llamalad7.mixinextras.sugar.Local;
36
import net.minecraft.block.BlockState;
47
import net.minecraft.block.FireBlock;
58
import net.minecraft.server.world.ServerWorld;
@@ -15,8 +18,8 @@
1518

1619
@Mixin(FireBlock.class)
1720
public class FireBlockMixin {
18-
@Redirect(method = "scheduledTick", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/GameRules;getBoolean(Lnet/minecraft/world/GameRules$Key;)Z"))
19-
private boolean test(GameRules gameRules, GameRules.Key<GameRules.BooleanRule> rule, BlockState state, ServerWorld world, BlockPos pos, Random random) {
21+
@WrapOperation(method = "scheduledTick", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/GameRules;getBoolean(Lnet/minecraft/world/GameRules$Key;)Z"))
22+
private boolean test(GameRules instance, GameRules.Key<GameRules.BooleanRule> rule, Operation<Boolean> original, @Local ServerWorld world, @Local BlockPos pos) {
2023
try (var invokers = Stimuli.select().at(world, pos)) {
2124
var result = invokers.get(FireTickEvent.EVENT).onFireTick(world, pos);
2225
if (result == ActionResult.SUCCESS) {
@@ -26,6 +29,6 @@ private boolean test(GameRules gameRules, GameRules.Key<GameRules.BooleanRule> r
2629
}
2730
}
2831

29-
return gameRules.getBoolean(GameRules.DO_FIRE_TICK);
32+
return original.call(instance, rule);
3033
}
3134
}

0 commit comments

Comments
 (0)