diff --git a/README.md b/README.md index a417f970..8b7b70db 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ A Bukkit server implementation utilizing Mixin. | Minecraft | Forge | Status | Build | | :----: |:-------:| :---: | :---: | -| 1.18.x | 40.0.12 | ACTIVE | [![1.18 Status](https://img.shields.io/appveyor/build/IzzelAliz/arclight-18?style=flat-square)](https://ci.appveyor.com/project/IzzelAliz/arclight-18) | +| 1.18.x | 40.1.0 | ACTIVE | [![1.18 Status](https://img.shields.io/appveyor/build/IzzelAliz/arclight-18?style=flat-square)](https://ci.appveyor.com/project/IzzelAliz/arclight-18) | | 1.17.x | 37.1.0 | [LEGACY](https://github.com/IzzelAliz/Arclight/releases/tag/1.17/1.0.2) | [![1.17 Status](https://img.shields.io/appveyor/build/IzzelAliz/arclight-17?style=flat-square)](https://ci.appveyor.com/project/IzzelAliz/arclight-17) | | 1.16.x | 36.2.26 | ACTIVE | [![1.16 Status](https://img.shields.io/appveyor/build/IzzelAliz/arclight-16?style=flat-square)](https://ci.appveyor.com/project/IzzelAliz/arclight-16) | | 1.15.x | 31.2.48 | [LEGACY](https://github.com/IzzelAliz/Arclight/releases/tag/1.15/1.0.19) | [![1.15 Status](https://img.shields.io/appveyor/build/IzzelAliz/arclight-15?style=flat-square)](https://ci.appveyor.com/project/IzzelAliz/arclight-15) | diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/bridge/core/world/chunk/LevelChunkSectionBridge.java b/arclight-common/src/main/java/io/izzel/arclight/common/bridge/core/world/chunk/LevelChunkSectionBridge.java index 3bcd140b..a65e2aeb 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/bridge/core/world/chunk/LevelChunkSectionBridge.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/bridge/core/world/chunk/LevelChunkSectionBridge.java @@ -1,8 +1,9 @@ package io.izzel.arclight.common.bridge.core.world.chunk; +import net.minecraft.core.Holder; import net.minecraft.world.level.biome.Biome; public interface LevelChunkSectionBridge { - void bridge$setBiome(int x, int y, int z, Biome biome); + void bridge$setBiome(int x, int y, int z, Holder biome); } diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/food/FoodDataMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/food/FoodDataMixin.java index 4b54a2e8..0aa4f98d 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/food/FoodDataMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/food/FoodDataMixin.java @@ -6,6 +6,7 @@ import io.izzel.arclight.common.bridge.core.entity.player.ServerPlayerEntityBrid import io.izzel.arclight.common.bridge.core.util.FoodStatsBridge; import net.minecraft.network.protocol.game.ClientboundSetHealthPacket; import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.food.FoodData; import net.minecraft.world.food.FoodProperties; @@ -22,6 +23,8 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import javax.annotation.Nullable; + @Mixin(FoodData.class) public abstract class FoodDataMixin implements FoodStatsBridge { @@ -46,19 +49,22 @@ public abstract class FoodDataMixin implements FoodStatsBridge { this.entityhuman = playerEntity; } - @Redirect(method = "eat(Lnet/minecraft/world/item/Item;Lnet/minecraft/world/item/ItemStack;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/food/FoodData;eat(IF)V")) - public void arclight$foodLevelChange(FoodData foodStats, int foodLevelIn, float foodSaturationModifier, Item maybeFood, ItemStack stack) { - if (entityhuman == null) { + @Redirect(method = "eat(Lnet/minecraft/world/item/Item;Lnet/minecraft/world/item/ItemStack;Lnet/minecraft/world/entity/LivingEntity;)V", at = @At(value = "INVOKE", remap = false, target = "Lnet/minecraft/world/food/FoodData;eat(IF)V")) + public void arclight$foodLevelChange(FoodData foodStats, int foodLevelIn, float foodSaturationModifier, Item maybeFood, ItemStack stack, @Nullable LivingEntity entity) { + var player = this.entityhuman != null ? this.entityhuman : (entity instanceof Player p ? p : null); + if (player == null) { foodStats.eat(foodLevelIn, foodSaturationModifier); return; + } else if (this.entityhuman == null) { + this.entityhuman = player; } - FoodProperties food = maybeFood.getFoodProperties(); + FoodProperties food = maybeFood.getFoodProperties(stack, entity); int oldFoodLevel = this.foodLevel; - FoodLevelChangeEvent event = CraftEventFactory.callFoodLevelChangeEvent(entityhuman, food.getNutrition() + oldFoodLevel, stack); + FoodLevelChangeEvent event = CraftEventFactory.callFoodLevelChangeEvent(player, food.getNutrition() + oldFoodLevel, stack); if (!event.isCancelled()) { this.eat(event.getFoodLevel() - oldFoodLevel, food.getSaturationModifier()); } - ((ServerPlayerEntityBridge) entityhuman).bridge$getBukkitEntity().sendHealthUpdate(); + ((ServerPlayerEntityBridge) player).bridge$getBukkitEntity().sendHealthUpdate(); } @Inject(method = "tick", at = @At(value = "INVOKE_ASSIGN", remap = false, target = "Ljava/lang/Math;max(II)I")) diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/level/chunk/ChunkAccessMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/level/chunk/ChunkAccessMixin.java index 439b1356..3e918af0 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/level/chunk/ChunkAccessMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/level/chunk/ChunkAccessMixin.java @@ -6,6 +6,7 @@ import net.minecraft.CrashReport; import net.minecraft.CrashReportCategory; import net.minecraft.ReportedException; import net.minecraft.core.BlockPos; +import net.minecraft.core.Holder; import net.minecraft.core.QuartPos; import net.minecraft.core.Registry; import net.minecraft.nbt.CompoundTag; @@ -73,7 +74,7 @@ public abstract class ChunkAccessMixin implements BlockGetter, BiomeManager.Nois return this.persistentDataContainer; } - public void setBiome(int i, int j, int k, Biome biome) { + public void setBiome(int i, int j, int k, Holder biome) { try { int l = QuartPos.fromBlock(this.getMinBuildHeight()); int i1 = l + QuartPos.fromBlock(this.getHeight()) - 1; diff --git a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/level/chunk/LevelChunkSectionMixin.java b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/level/chunk/LevelChunkSectionMixin.java index fefbdf45..68c2161a 100644 --- a/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/level/chunk/LevelChunkSectionMixin.java +++ b/arclight-common/src/main/java/io/izzel/arclight/common/mixin/core/world/level/chunk/LevelChunkSectionMixin.java @@ -1,9 +1,15 @@ package io.izzel.arclight.common.mixin.core.world.level.chunk; import io.izzel.arclight.common.bridge.core.world.chunk.LevelChunkSectionBridge; +import io.izzel.arclight.common.mod.util.ResourceLocationUtil; +import net.minecraft.core.Holder; import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.chunk.LevelChunkSection; import net.minecraft.world.level.chunk.PalettedContainer; +import org.bukkit.Bukkit; +import net.minecraft.core.Registry; +import org.bukkit.craftbukkit.v.CraftServer; +import org.bukkit.craftbukkit.v.block.CraftBlock; import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -11,14 +17,14 @@ import org.spongepowered.asm.mixin.Shadow; @Mixin(LevelChunkSection.class) public class LevelChunkSectionMixin implements LevelChunkSectionBridge { - @Shadow @Final private PalettedContainer biomes; + @Shadow @Final private PalettedContainer> biomes; - public void setBiome(int i, int j, int k, Biome biome) { + public void setBiome(int i, int j, int k, Holder biome) { this.biomes.set(i, j, k, biome); } @Override - public void bridge$setBiome(int x, int y, int z, Biome biome) { + public void bridge$setBiome(int x, int y, int z, Holder biome) { this.setBiome(x, y, z, biome); } } diff --git a/build.gradle b/build.gradle index 5921fc15..bab1d395 100644 --- a/build.gradle +++ b/build.gradle @@ -14,7 +14,7 @@ allprojects { ext { agpVersion = '1.22' minecraftVersion = '1.18.2' - forgeVersion = '40.0.36' + forgeVersion = '40.1.0' apiVersion = '1.2.6' toolsVersion = '1.3.+' mixinVersion = '0.8.5'