1 package com.irtimaled.bbor.mixin.village;
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;
15 public abstract class MixinVillage {
17 protected abstract void updateVillagerCount();
20 private int villagerCount;
22 @Shadow private World world;
24 @Inject(method = "updateVillageRadiusAndCenter", at = @At("HEAD"))
25 private void updateVillageRadiusAndCenter(CallbackInfo ci) {
26 Village village = (Village) (Object) this;
27 publishVillageUpdated(village);
30 private void publishVillageUpdated(Village village) {
31 EventBus.publish(new VillageUpdated(world.dimension.getType(), village));
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);