]> git.lizzy.rs Git - BoundingBoxOutlineReloaded.git/blob - src/main/java/com/irtimaled/bbor/mixin/village/MixinVillage.java
Bump version to 1.0.6
[BoundingBoxOutlineReloaded.git] / src / main / java / com / irtimaled / bbor / mixin / village / MixinVillage.java
1 package com.irtimaled.bbor.mixin.village;
2
3 import com.irtimaled.bbor.common.EventBus;
4 import com.irtimaled.bbor.common.events.VillageUpdated;
5 import net.minecraft.village.Village;
6 import net.minecraft.world.World;
7 import org.spongepowered.asm.mixin.Mixin;
8 import org.spongepowered.asm.mixin.Shadow;
9 import org.spongepowered.asm.mixin.injection.At;
10 import org.spongepowered.asm.mixin.injection.Inject;
11 import org.spongepowered.asm.mixin.injection.Redirect;
12 import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
13
14 @Mixin(Village.class)
15 public abstract class MixinVillage {
16     @Shadow
17     protected abstract void updateVillagerCount();
18
19     @Shadow
20     private int villagerCount;
21
22     @Shadow private World world;
23
24     @Inject(method = "updateVillageRadiusAndCenter", at = @At("HEAD"))
25     private void updateVillageRadiusAndCenter(CallbackInfo ci) {
26         Village village = (Village) (Object) this;
27         publishVillageUpdated(village);
28     }
29
30     private void publishVillageUpdated(Village village) {
31         EventBus.publish(new VillageUpdated(world.dimension.getType(), village));
32     }
33
34     @Redirect(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/village/Village;updateVillagerCount()V"))
35     private void tick(Village village) {
36         int population = this.villagerCount;
37         this.updateVillagerCount();
38         if (this.villagerCount != population)
39             publishVillageUpdated(village);
40     }
41 }