diff --git a/src/generated/resources/assets/anvilcraft_pigsplus/lang/en_ud.json b/src/generated/resources/assets/anvilcraft_pigsplus/lang/en_ud.json index f08cb1d..766d829 100644 --- a/src/generated/resources/assets/anvilcraft_pigsplus/lang/en_ud.json +++ b/src/generated/resources/assets/anvilcraft_pigsplus/lang/en_ud.json @@ -52,10 +52,11 @@ "item.anvilcraft_pigsplus.chaotic_raw_ore": "ǝɹO ʍɐᴚ ɔıʇoɐɥƆ", "item.anvilcraft_pigsplus.ender_component": "ʇuǝuodɯoƆ ɹǝpuƎ", "item.anvilcraft_pigsplus.karakuri_component": "ʇuǝuodɯoƆ ıɹnʞɐɹɐʞ", + "item.anvilcraft_pigsplus.portable_wireless_charger": "ɹǝbɹɐɥƆ ssǝןǝɹıM ǝןqɐʇɹoԀ", "item.anvilcraft_pigsplus.spiritual_component": "ʇuǝuodɯoƆ ןɐnʇıɹıdS", "itemGroup.anvilcraft_pigsplus.addon_items": "snןԀ sbıԀ :ʇɟɐɹƆןıʌuⱯ", - "jei.anvilcraft.pigsplus.info.ender_component": "˙ʇuǝuodɯoƆ ɹǝpuƎ ɐ uıɐʇqo oʇ ǝɔuɐɥɔ %0ᄅ ɐ sı ǝɹǝɥʇ 'ןɐʇɹod puƎ ǝɥʇ oʇuı ʇuǝuodɯoƆ ıɹnʞɐɹɐʞ ɐ ʍoɹɥ⟘", - "jei.anvilcraft.pigsplus.info.spiritual_component": "˙ʇuǝuodɯoƆ ɯnıpǝW ǝuo ʇsoɯ ʇɐ ǝʇɐɹǝuǝb oʇ ǝɔuɐɥɔ %0ᄅ ɐ sǝpıʌoɹd ʇuǝɯʇuɐɥɔuǝ ɥɔɐǝ 'pǝʎoɹʇsǝp sı ʇuǝuodɯoƆ ıɹnʞɐɹɐʞ ɐ uǝɥM", + "jei.anvilcraft.pigsplus.info.ender_component": "˙ʇuǝuodɯoƆ ɹǝpuƎ ɐ uıɐʇqo oʇ ǝɔuɐɥɔ %%ɟ0˙% ɐ sı ǝɹǝɥʇ 'ןɐʇɹod puƎ ǝɥʇ oʇuı ʇuǝuodɯoƆ ıɹnʞɐɹɐʞ ɐ ʍoɹɥ⟘", + "jei.anvilcraft.pigsplus.info.spiritual_component": "˙ʇuǝuodɯoƆ ɯnıpǝW ǝuo ʇsoɯ ʇɐ ǝʇɐɹǝuǝb oʇ ǝɔuɐɥɔ %%ɟ0˙% ɐ sǝpıʌoɹd ʇuǝɯʇuɐɥɔuǝ ɥɔɐǝ 'pǝʎoɹʇsǝp sı ʇuǝuodɯoƆ ıɹnʞɐɹɐʞ ɐ uǝɥM", "tooltip.anvilcraft.pigsplus.enchanted_generator.max_power_value": "Mʞ %d :uoıʇdɯnsuoɔ ɹǝʍod xɐW", "tooltip.anvilcraft.pigsplus.enchanted_generator.power_rate": "%s :ǝʇɐɹ uoıʇdɯnsuoɔ ɹǝʍoԀ", "tooltip.anvilcraft.pigsplus.enchanted_generator.previous_energy_consumption": "%d :uoıʇdɯnsuoɔ ʎbɹǝuǝ ɯǝʇı snoıʌǝɹԀ", diff --git a/src/generated/resources/assets/anvilcraft_pigsplus/lang/en_us.json b/src/generated/resources/assets/anvilcraft_pigsplus/lang/en_us.json index 0ada3e4..6859c28 100644 --- a/src/generated/resources/assets/anvilcraft_pigsplus/lang/en_us.json +++ b/src/generated/resources/assets/anvilcraft_pigsplus/lang/en_us.json @@ -52,10 +52,11 @@ "item.anvilcraft_pigsplus.chaotic_raw_ore": "Chaotic Raw Ore", "item.anvilcraft_pigsplus.ender_component": "Ender Component", "item.anvilcraft_pigsplus.karakuri_component": "Karakuri Component", + "item.anvilcraft_pigsplus.portable_wireless_charger": "Portable Wireless Charger", "item.anvilcraft_pigsplus.spiritual_component": "Spiritual Component", "itemGroup.anvilcraft_pigsplus.addon_items": "AnvilCraft: Pigs Plus", - "jei.anvilcraft.pigsplus.info.ender_component": "Throw a Karakuri Component into the End portal, there is a 20% chance to obtain a Ender Component.", - "jei.anvilcraft.pigsplus.info.spiritual_component": "When a Karakuri Component is destroyed, each enchantment provides a 20% chance to generate at most one Medium Component.", + "jei.anvilcraft.pigsplus.info.ender_component": "Throw a Karakuri Component into the End portal, there is a %.0f%% chance to obtain a Ender Component.", + "jei.anvilcraft.pigsplus.info.spiritual_component": "When a Karakuri Component is destroyed, each enchantment provides a %.0f%% chance to generate at most one Medium Component.", "tooltip.anvilcraft.pigsplus.enchanted_generator.max_power_value": "Max power consumption: %d kW", "tooltip.anvilcraft.pigsplus.enchanted_generator.power_rate": "Power consumption rate: %s", "tooltip.anvilcraft.pigsplus.enchanted_generator.previous_energy_consumption": "Previous item energy consumption: %d", diff --git a/src/generated/resources/assets/anvilcraft_pigsplus/models/item/portable_wireless_charger.json b/src/generated/resources/assets/anvilcraft_pigsplus/models/item/portable_wireless_charger.json new file mode 100644 index 0000000..777ef41 --- /dev/null +++ b/src/generated/resources/assets/anvilcraft_pigsplus/models/item/portable_wireless_charger.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "anvilcraft_pigsplus:item/portable_wireless_charger" + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft_pigsplus/advancement/recipes/misc/portable_wireless_charger.json b/src/generated/resources/data/anvilcraft_pigsplus/advancement/recipes/misc/portable_wireless_charger.json new file mode 100644 index 0000000..7774fdb --- /dev/null +++ b/src/generated/resources/data/anvilcraft_pigsplus/advancement/recipes/misc/portable_wireless_charger.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_karakuri_component": { + "conditions": { + "items": [ + { + "items": "anvilcraft_pigsplus:karakuri_component" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "anvilcraft_pigsplus:portable_wireless_charger" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_karakuri_component" + ] + ], + "rewards": { + "recipes": [ + "anvilcraft_pigsplus:portable_wireless_charger" + ] + } +} \ No newline at end of file diff --git a/src/generated/resources/data/anvilcraft_pigsplus/recipe/portable_wireless_charger.json b/src/generated/resources/data/anvilcraft_pigsplus/recipe/portable_wireless_charger.json new file mode 100644 index 0000000..1bfaaf6 --- /dev/null +++ b/src/generated/resources/data/anvilcraft_pigsplus/recipe/portable_wireless_charger.json @@ -0,0 +1,27 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "misc", + "key": { + "A": { + "item": "anvilcraft:power_converter_big" + }, + "B": { + "item": "anvilcraft_pigsplus:karakuri_component" + }, + "C": { + "item": "anvilcraft:charger" + }, + "S": { + "item": "minecraft:copper_ingot" + } + }, + "pattern": [ + "SAS", + "SBS", + "SCS" + ], + "result": { + "count": 1, + "id": "anvilcraft_pigsplus:portable_wireless_charger" + } +} \ No newline at end of file diff --git a/src/main/java/dev/anvilcraft/pigsplus/block/entity/ElectricEnchantingTableBlockEntity.java b/src/main/java/dev/anvilcraft/pigsplus/block/entity/ElectricEnchantingTableBlockEntity.java index 3f914f4..f34c5b5 100644 --- a/src/main/java/dev/anvilcraft/pigsplus/block/entity/ElectricEnchantingTableBlockEntity.java +++ b/src/main/java/dev/anvilcraft/pigsplus/block/entity/ElectricEnchantingTableBlockEntity.java @@ -46,8 +46,6 @@ public class ElectricEnchantingTableBlockEntity extends BlockEntity public Map, Integer> enchantments = new HashMap<>(); @Getter private int time = 0; - @Getter - public final int maxPowerValue = CONFIG.electricEnchantingTable.basePowerConsumptionLimit; private int powerValue = 0; @Getter private double powerRate = 1; @@ -172,7 +170,7 @@ protected void moveItemToTransformingSlot() { int needPower = CalcCostPowerValue(); prevPowerValue = needPower; - if (needPower > maxPowerValue | needPower <= 0) { + if (needPower > CONFIG.electricEnchantingTable.basePowerConsumptionLimit | needPower <= 0) { dropItemStack(stack); return; } diff --git a/src/main/java/dev/anvilcraft/pigsplus/data/lang/JeiLang.java b/src/main/java/dev/anvilcraft/pigsplus/data/lang/JeiLang.java index 7f1db96..6287977 100644 --- a/src/main/java/dev/anvilcraft/pigsplus/data/lang/JeiLang.java +++ b/src/main/java/dev/anvilcraft/pigsplus/data/lang/JeiLang.java @@ -7,12 +7,12 @@ public class JeiLang { public static void init(RegistrateLangProvider provider) { provider.add( "jei.anvilcraft.pigsplus.info.spiritual_component", - "When a Karakuri Component is destroyed, each enchantment provides a 20% chance to generate at most one Medium Component." + "When a Karakuri Component is destroyed, each enchantment provides a %.0f%% chance to generate at most one Medium Component." ); provider.add( "jei.anvilcraft.pigsplus.info.ender_component", - "Throw a Karakuri Component into the End portal, there is a 20% chance to obtain a Ender Component." + "Throw a Karakuri Component into the End portal, there is a %.0f%% chance to obtain a Ender Component." ); diff --git a/src/main/java/dev/anvilcraft/pigsplus/event/PlayerTickEventListener.java b/src/main/java/dev/anvilcraft/pigsplus/event/PlayerTickEventListener.java new file mode 100644 index 0000000..2304286 --- /dev/null +++ b/src/main/java/dev/anvilcraft/pigsplus/event/PlayerTickEventListener.java @@ -0,0 +1,18 @@ +package dev.anvilcraft.pigsplus.event; + +import dev.anvilcraft.pigsplus.item.PortableWirelessChargerItem; +import net.minecraft.server.level.ServerPlayer; +import net.neoforged.bus.api.SubscribeEvent; +import net.neoforged.fml.common.EventBusSubscriber; +import net.neoforged.neoforge.event.tick.PlayerTickEvent; + +@EventBusSubscriber +public class PlayerTickEventListener { + + @SubscribeEvent + public static void onPlayerTick(PlayerTickEvent.Post event) { + if (event.getEntity() instanceof ServerPlayer serverPlayer) { + PortableWirelessChargerItem.playerTick(serverPlayer); + } + } +} diff --git a/src/main/java/dev/anvilcraft/pigsplus/init/AddonBlocks.java b/src/main/java/dev/anvilcraft/pigsplus/init/AddonBlocks.java index 3b1d5f2..4900b4d 100644 --- a/src/main/java/dev/anvilcraft/pigsplus/init/AddonBlocks.java +++ b/src/main/java/dev/anvilcraft/pigsplus/init/AddonBlocks.java @@ -35,7 +35,7 @@ import static dev.anvilcraft.pigsplus.AnvilCraftPigsPlus.REGISTRATE; -public class AddonBlocks { +public class AddonBlocks { static { REGISTRATE.defaultCreativeTab(AddonItemGroups.ADDON_ITEMS.getKey()); } diff --git a/src/main/java/dev/anvilcraft/pigsplus/init/AddonItems.java b/src/main/java/dev/anvilcraft/pigsplus/init/AddonItems.java index 382f5d3..26cf0bf 100644 --- a/src/main/java/dev/anvilcraft/pigsplus/init/AddonItems.java +++ b/src/main/java/dev/anvilcraft/pigsplus/init/AddonItems.java @@ -3,9 +3,12 @@ import com.tterrag.registrate.util.entry.ItemEntry; import dev.anvilcraft.pigsplus.item.KarakuriComponentItem; +import dev.anvilcraft.pigsplus.item.PortableWirelessChargerItem; import dev.dubhe.anvilcraft.data.AnvilCraftDatagen; +import dev.dubhe.anvilcraft.init.block.ModBlocks; import dev.dubhe.anvilcraft.init.item.ModItemTags; import net.minecraft.data.recipes.RecipeCategory; +import net.minecraft.data.recipes.ShapedRecipeBuilder; import net.minecraft.data.recipes.ShapelessRecipeBuilder; import net.minecraft.world.item.Item; import net.minecraft.world.item.Items; @@ -47,6 +50,21 @@ public class AddonItems { .save(provider)) .register(); + public static final ItemEntry PORTABLE_WIRELESS_CHARGER = REGISTRATE + .item("portable_wireless_charger", PortableWirelessChargerItem::new) + .properties((properties) -> properties.stacksTo(1)) + .recipe((ctx, provider) -> ShapedRecipeBuilder.shaped(RecipeCategory.MISC, ctx.get()) + .pattern("SAS") + .pattern("SBS") + .pattern("SCS") + .define('S', Items.COPPER_INGOT) + .define('A', ModBlocks.POWER_CONVERTER_BIG) + .define('B', AddonItems.KARAKURI_COMPONENT) + .define('C', ModBlocks.CHARGER) + .unlockedBy(AnvilCraftDatagen.hasItem(AddonItems.KARAKURI_COMPONENT), AnvilCraftDatagen.has(AddonItems.KARAKURI_COMPONENT)) + .save(provider)) + .register(); + public static void register() { } } \ No newline at end of file diff --git a/src/main/java/dev/anvilcraft/pigsplus/integration/jade/provider/ElectricEnchantingTableProvider.java b/src/main/java/dev/anvilcraft/pigsplus/integration/jade/provider/ElectricEnchantingTableProvider.java index 5145e0c..a0b9008 100644 --- a/src/main/java/dev/anvilcraft/pigsplus/integration/jade/provider/ElectricEnchantingTableProvider.java +++ b/src/main/java/dev/anvilcraft/pigsplus/integration/jade/provider/ElectricEnchantingTableProvider.java @@ -12,6 +12,8 @@ import snownee.jade.api.ITooltip; import snownee.jade.api.config.IPluginConfig; +import static dev.anvilcraft.pigsplus.AnvilCraftPigsPlus.CONFIG; + public enum ElectricEnchantingTableProvider implements IBlockComponentProvider, IServerDataProvider { INSTANCE; @@ -45,7 +47,7 @@ public void appendTooltip(ITooltip tooltip, BlockAccessor accessor, IPluginConfi public void appendServerData(CompoundTag tag, BlockAccessor accessor) { if (accessor.getBlockEntity() instanceof ElectricEnchantingTableBlockEntity entity) { tag.putInt("time", entity.getTime()); - tag.putInt("maxPowerValue", entity.getMaxPowerValue()); + tag.putInt("maxPowerValue", CONFIG.electricEnchantingTable.basePowerConsumptionLimit); tag.putDouble("powerRate", entity.getPowerRate()); tag.putInt("prevPowerValue", entity.getPrevPowerValue()); } diff --git a/src/main/java/dev/anvilcraft/pigsplus/integration/jei/AddonJeiPlugin.java b/src/main/java/dev/anvilcraft/pigsplus/integration/jei/AddonJeiPlugin.java index 3d0d365..228a437 100644 --- a/src/main/java/dev/anvilcraft/pigsplus/integration/jei/AddonJeiPlugin.java +++ b/src/main/java/dev/anvilcraft/pigsplus/integration/jei/AddonJeiPlugin.java @@ -8,6 +8,9 @@ import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; +import static dev.anvilcraft.pigsplus.item.KarakuriComponentItem.PROBABILITY; +import static dev.anvilcraft.pigsplus.util.EnderComponentConversionUtil.ConversionChance; + @JeiPlugin public class AddonJeiPlugin implements IModPlugin { @@ -20,12 +23,12 @@ public ResourceLocation getPluginUid() { public void registerRecipes(IRecipeRegistration registration) { registration.addItemStackInfo( AddonItems.SPIRITUAL_COMPONENT.asStack(), - Component.translatable("jei.anvilcraft.pigsplus.info.spiritual_component") + Component.translatable("jei.anvilcraft.pigsplus.info.spiritual_component", PROBABILITY*100) ); registration.addItemStackInfo( AddonItems.ENDER_COMPONENT.asStack(), - Component.translatable("jei.anvilcraft.pigsplus.info.ender_component") + Component.translatable("jei.anvilcraft.pigsplus.info.ender_component", ConversionChance * 100) ); } } diff --git a/src/main/java/dev/anvilcraft/pigsplus/item/KarakuriComponentItem.java b/src/main/java/dev/anvilcraft/pigsplus/item/KarakuriComponentItem.java index 5e04942..8f3c8e5 100644 --- a/src/main/java/dev/anvilcraft/pigsplus/item/KarakuriComponentItem.java +++ b/src/main/java/dev/anvilcraft/pigsplus/item/KarakuriComponentItem.java @@ -16,6 +16,8 @@ import java.util.List; public class KarakuriComponentItem extends Item { + public static final float PROBABILITY = 0.25f; + public KarakuriComponentItem(Properties properties) { super(properties); } @@ -31,8 +33,7 @@ public void onDestroyed(ItemEntity itemEntity, DamageSource damageSource) { if (itemEnchantments == null || itemEnchantments.isEmpty()) return; List> enchantments = itemEnchantments.keySet().stream().toList(); - float probability = 0.25f * Mth.clamp(enchantments.size(), 0, 5); - + float probability = Mth.clamp(PROBABILITY * enchantments.size(), 0f, 1f); int count = MathUtil.getCount(probability, itemStack.getCount(), level); // 生成灵媒部件 diff --git a/src/main/java/dev/anvilcraft/pigsplus/item/PortableWirelessChargerItem.java b/src/main/java/dev/anvilcraft/pigsplus/item/PortableWirelessChargerItem.java new file mode 100644 index 0000000..d2ffa14 --- /dev/null +++ b/src/main/java/dev/anvilcraft/pigsplus/item/PortableWirelessChargerItem.java @@ -0,0 +1,57 @@ +package dev.anvilcraft.pigsplus.item; + +import dev.anvilcraft.pigsplus.init.AddonItems; +import dev.dubhe.anvilcraft.AnvilCraft; +import dev.dubhe.anvilcraft.api.power.DynamicPowerComponent; +import dev.dubhe.anvilcraft.api.power.IDynamicPowerComponentHolder; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.neoforged.neoforge.capabilities.Capabilities; +import net.neoforged.neoforge.energy.IEnergyStorage; + +public class PortableWirelessChargerItem extends Item { + public static final DynamicPowerComponent.PowerConsumption CONSUMPTION = new DynamicPowerComponent.PowerConsumption(512); + + + public PortableWirelessChargerItem(Properties properties) { + super(properties); + } + + public static void playerTick(ServerPlayer player) { + refreshPower(player); + chargePlayerItems(player); + } + + public static void refreshPower(ServerPlayer player) { + IDynamicPowerComponentHolder holder = IDynamicPowerComponentHolder.of(player); + DynamicPowerComponent powerComponent = holder.anvilcraft$getPowerComponent(); + boolean isInInventory = player.getInventory().contains(AddonItems.PORTABLE_WIRELESS_CHARGER.asStack()); + if (isInInventory) { + powerComponent.getPowerConsumptions().add(CONSUMPTION); + } else { + powerComponent.getPowerConsumptions().remove(CONSUMPTION); + } + } + + public static void chargePlayerItems(ServerPlayer player) { + boolean isInInventory = player.getInventory().contains(AddonItems.PORTABLE_WIRELESS_CHARGER.asStack()); + int feEnergy = CONSUMPTION.amount() * AnvilCraft.CONFIG.powerConverter.powerConverterEfficiency; + if (!isInInventory) return; + // 遍历玩家物品栏,尝试为有能量槽的物品充电 + for (int i = 0; i < player.getInventory().getContainerSize(); i++) { + ItemStack itemStack = player.getInventory().getItem(i); + if (itemStack.isEmpty()) continue; + + IEnergyStorage itemEnergy = itemStack.getCapability(Capabilities.EnergyStorage.ITEM); + if (itemEnergy == null) continue; + if (!itemEnergy.canReceive()) continue; + + int receiveEnergy = itemEnergy.receiveEnergy(feEnergy, false); + feEnergy -= receiveEnergy; + if (feEnergy <= 0) break; + } + } + + +} \ No newline at end of file diff --git a/src/main/resources/assets/anvilcraft_pigsplus/lang/zh_cn.json b/src/main/resources/assets/anvilcraft_pigsplus/lang/zh_cn.json index dc84be7..3738067 100644 --- a/src/main/resources/assets/anvilcraft_pigsplus/lang/zh_cn.json +++ b/src/main/resources/assets/anvilcraft_pigsplus/lang/zh_cn.json @@ -52,10 +52,11 @@ "item.anvilcraft_pigsplus.chaotic_raw_ore": "混沌粗矿", "item.anvilcraft_pigsplus.ender_component": "末影部件", "item.anvilcraft_pigsplus.karakuri_component": "机巧部件", + "item.anvilcraft_pigsplus.portable_wireless_charger": "便携无限充电器", "item.anvilcraft_pigsplus.spiritual_component": "灵媒部件", "itemGroup.anvilcraft_pigsplus.addon_items": "铁砧工艺:猪+", - "jei.anvilcraft.pigsplus.info.ender_component": "将机巧部件丢入末地传送门,有20%概率获得", - "jei.anvilcraft.pigsplus.info.spiritual_component": "携带附魔的机巧部件被摧毁时,每条附魔提供20%的概率,生成最多一个灵媒部件", + "jei.anvilcraft.pigsplus.info.ender_component": "将机巧部件丢入末地传送门,有%.0f%%概率获得", + "jei.anvilcraft.pigsplus.info.spiritual_component": "携带附魔的机巧部件被摧毁时,每条附魔提供%.0f%%的概率,生成最多一个灵媒部件", "tooltip.anvilcraft.pigsplus.enchanted_generator.max_power_value": "耗电上限: %d kW", "tooltip.anvilcraft.pigsplus.enchanted_generator.power_rate": "耗能率: %s", "tooltip.anvilcraft.pigsplus.enchanted_generator.previous_energy_consumption": "上一次附魔的能量消耗: %d", diff --git a/src/main/resources/assets/anvilcraft_pigsplus/textures/item/portable_wireless_charger.png b/src/main/resources/assets/anvilcraft_pigsplus/textures/item/portable_wireless_charger.png new file mode 100644 index 0000000..3187f9b Binary files /dev/null and b/src/main/resources/assets/anvilcraft_pigsplus/textures/item/portable_wireless_charger.png differ