From 7a73933c278d85eae051fecf57af25ec8f6e200e Mon Sep 17 00:00:00 2001 From: Light_Quanta Date: Sun, 25 May 2025 23:11:24 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=81=E8=AE=B8=E8=87=AA=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=E8=BD=BD=E5=85=B7=E4=BF=AE=E7=90=86=E6=9D=90=E6=96=99=E5=92=8C?= =?UTF-8?q?=E6=81=A2=E5=A4=8D=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/vehicle/DefaultVehicleData.java | 8 ++++ .../data/vehicle/VehicleData.java | 39 +++++++++++++++++++ .../entity/vehicle/base/VehicleEntity.java | 9 +++-- 3 files changed, 53 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/atsuishio/superbwarfare/data/vehicle/DefaultVehicleData.java b/src/main/java/com/atsuishio/superbwarfare/data/vehicle/DefaultVehicleData.java index 04767c0bd..87371c3d8 100644 --- a/src/main/java/com/atsuishio/superbwarfare/data/vehicle/DefaultVehicleData.java +++ b/src/main/java/com/atsuishio/superbwarfare/data/vehicle/DefaultVehicleData.java @@ -22,6 +22,14 @@ public class DefaultVehicleData { @SerializedName("RepairAmount") public float repairAmount = VehicleConfig.REPAIR_AMOUNT.get().floatValue(); + @ServerOnly + @SerializedName("RepairMaterial") + public String repairMaterial = "minecraft:iron_ingot"; + + @ServerOnly + @SerializedName("RepairMaterialHealAmount") + public float repairMaterialHealAmount = 50; + @SerializedName("MaxEnergy") public int maxEnergy = 100000; diff --git a/src/main/java/com/atsuishio/superbwarfare/data/vehicle/VehicleData.java b/src/main/java/com/atsuishio/superbwarfare/data/vehicle/VehicleData.java index 975a39633..c76dede9a 100644 --- a/src/main/java/com/atsuishio/superbwarfare/data/vehicle/VehicleData.java +++ b/src/main/java/com/atsuishio/superbwarfare/data/vehicle/VehicleData.java @@ -6,8 +6,12 @@ import com.atsuishio.superbwarfare.init.ModDamageTypes; import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.ItemTags; import net.minecraft.world.damagesource.DamageTypes; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.item.ItemStack; import org.jetbrains.annotations.NotNull; public class VehicleData { @@ -46,6 +50,41 @@ public class VehicleData { return data.repairAmount; } + public String repairMaterial() { + return data.repairMaterial; + } + + public float repairMaterialHealAmount() { + return data.repairMaterialHealAmount; + } + + public boolean canRepairManually() { + var material = repairMaterial(); + if (material == null) return false; + + if (material.startsWith("#")) { + material = material.substring(1); + } + return ResourceLocation.tryParse(material) != null; + } + + public boolean isRepairMaterial(ItemStack stack) { + var material = repairMaterial(); + var useTag = false; + + if (material.startsWith("#")) { + material = material.substring(1); + useTag = true; + } + + var location = ResourceLocation.parse(material); + if (!useTag) { + return stack.getItem() == BuiltInRegistries.ITEM.get(location); + } else { + return stack.is(ItemTags.create(location)); + } + } + public int maxEnergy() { return data.maxEnergy; } diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/base/VehicleEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/base/VehicleEntity.java index 7258498a4..66fafaa8c 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/base/VehicleEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/base/VehicleEntity.java @@ -50,7 +50,6 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.projectile.AbstractArrow; import net.minecraft.world.entity.vehicle.DismountHelper; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.gameevent.GameEvent; import net.minecraft.world.level.material.Fluid; @@ -334,6 +333,7 @@ public abstract class VehicleEntity extends Entity { @Override public @NotNull InteractionResult interact(Player player, @NotNull InteractionHand hand) { if (player.getVehicle() == this) return InteractionResult.PASS; + var data = data(); ItemStack stack = player.getMainHandItem(); if (player.isShiftKeyDown() && stack.is(ModItems.CROWBAR.get()) && this.getPassengers().isEmpty()) { @@ -344,8 +344,11 @@ public abstract class VehicleEntity extends Entity { this.remove(RemovalReason.DISCARDED); this.discard(); return InteractionResult.SUCCESS; - } else if (this.getHealth() < this.getMaxHealth() && stack.is(Items.IRON_INGOT)) { - this.heal(Math.min(50, this.getMaxHealth())); + } else if (this.getHealth() < this.getMaxHealth() + && data.canRepairManually() + && data.isRepairMaterial(stack) + ) { + this.heal(Math.min(data.repairMaterialHealAmount(), this.getMaxHealth())); stack.shrink(1); if (!this.level().isClientSide) { this.level().playSound(null, this, SoundEvents.IRON_GOLEM_REPAIR, this.getSoundSource(), 0.5f, 1);