Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,7 @@
"anvilcraft_pigsplus.configuration.electric_enchanting_table.base_power_consumption_limit.tooltip": "ǝןqɐ⟘ buıʇuɐɥɔuƎ ɔıɹʇɔǝןƎ ɹoɟ ʇıɯıן uoıʇdɯnsuoɔ ɹǝʍod ǝsɐᗺ",
"anvilcraft_pigsplus.configuration.electric_enchanting_table.button": "ǝןqɐ⟘ buıʇuɐɥɔuƎ ɔıɹʇɔǝןƎ",
"anvilcraft_pigsplus.configuration.electric_enchanting_table.decrease_power_rate": "ǝʇɐᴚ ɹǝʍoԀ ǝsɐǝɹɔǝᗡ",
"anvilcraft_pigsplus.configuration.electric_enchanting_table.decrease_power_rate.tooltip": "ɟןǝɥSʞooq ɹǝd ǝsɐǝɹɔǝp ǝʇɐɹ uoıʇdɯnsuoɔ ɹǝʍoԀ",
"anvilcraft_pigsplus.configuration.electric_enchanting_table.power_addition": "uoıʇıppⱯ ɹǝʍoԀ",
"anvilcraft_pigsplus.configuration.electric_enchanting_table.power_addition.tooltip": "ǝɹoɔ ɹǝd ǝsɐǝɹɔuı ʇıɯıן uoıʇdɯnsuoɔ ɹǝʍoԀ",
"anvilcraft_pigsplus.configuration.electric_enchanting_table.decrease_power_rate.tooltip": "ɹǝʍoԀʇuɐɥɔuǝ ɹǝd ǝsɐǝɹɔǝp ǝʇɐɹ uoıʇdɯnsuoɔ ɹǝʍoԀ",
"anvilcraft_pigsplus.configuration.electric_enchanting_table.power_per2_level": "ןǝʌǝꞀ ᄅɹǝԀ ɹǝʍoԀ",
"anvilcraft_pigsplus.configuration.electric_enchanting_table.power_per2_level.tooltip": "ןǝʌǝꞀ ǝɔuǝıɹǝdxƎ uo pǝsɐᗺ ʇuǝıɔıɟɟǝoƆ uoıʇdɯnsuoƆ ɹǝʍoԀ ɔıʇɐɹpɐnὉ",
"anvilcraft_pigsplus.configuration.electric_enchanting_table.power_per_level": "ןǝʌǝꞀ ɹǝԀ ɹǝʍoԀ",
Expand Down Expand Up @@ -60,5 +58,6 @@
"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ıʌǝɹԀ",
"tooltip.anvilcraft.pigsplus.enchanted_generator.time": "%s :ǝɯıʇ buıuıɐɯǝᴚ"
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,7 @@
"anvilcraft_pigsplus.configuration.electric_enchanting_table.base_power_consumption_limit.tooltip": "Base power consumption limit for Electric Enchanting Table",
"anvilcraft_pigsplus.configuration.electric_enchanting_table.button": "Electric Enchanting Table",
"anvilcraft_pigsplus.configuration.electric_enchanting_table.decrease_power_rate": "Decrease Power Rate",
"anvilcraft_pigsplus.configuration.electric_enchanting_table.decrease_power_rate.tooltip": "Power consumption rate decrease per bookShelf",
"anvilcraft_pigsplus.configuration.electric_enchanting_table.power_addition": "Power Addition",
"anvilcraft_pigsplus.configuration.electric_enchanting_table.power_addition.tooltip": "Power consumption limit increase per core",
"anvilcraft_pigsplus.configuration.electric_enchanting_table.decrease_power_rate.tooltip": "Power consumption rate decrease per enchantPower",
"anvilcraft_pigsplus.configuration.electric_enchanting_table.power_per2_level": "Power Per2 Level",
"anvilcraft_pigsplus.configuration.electric_enchanting_table.power_per2_level.tooltip": "Quadratic Power Consumption Coefficient Based on Experience Level",
"anvilcraft_pigsplus.configuration.electric_enchanting_table.power_per_level": "Power Per Level",
Expand Down Expand Up @@ -60,5 +58,6 @@
"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.",
"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",
"tooltip.anvilcraft.pigsplus.enchanted_generator.time": "Remaining time: %s"
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,27 +2,17 @@
"type": "anvilcraft:time_warp",
"ingredients": [
{
"items": "anvilcraft_pigsplus:karakuri_component"
},
{
"count": 6,
"items": "minecraft:ender_pearl"
},
{
"count": 3,
"count": 18,
"items": "minecraft:end_stone"
}
],
"results": [
{
"count": {
"type": "minecraft:binomial",
"n": 1.0,
"p": 0.2
},
"id": "anvilcraft_pigsplus:ender_component"
},
{
"id": "anvilcraft:levitation_powder"
}
]
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import dev.dubhe.anvilcraft.api.itemhandler.FilteredItemStackHandler;
import dev.dubhe.anvilcraft.api.power.IPowerComponent;
import net.minecraft.core.BlockPos;
import net.minecraft.core.particles.ParticleTypes;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.sounds.SoundEvents;
import net.minecraft.sounds.SoundSource;
Expand All @@ -32,18 +33,26 @@
import net.minecraft.world.phys.Vec3;

import javax.annotation.Nullable;
import java.util.List;

public class ElectricEnchantingTableBlock extends BaseEntityBlock implements IHammerRemovable {
public static final BooleanProperty POWERED = BlockStateProperties.POWERED;
public static final BooleanProperty OVERLOAD = IPowerComponent.OVERLOAD;

public static final List<BlockPos> BOOKSHELF_OFFSETS =
BlockPos.betweenClosedStream(-2, 0, -2, 2, 1, 2)
.filter((blockPos) -> Math.abs(blockPos.getX()) == 2 || Math.abs(blockPos.getZ()) == 2)
.map(BlockPos::immutable)
.toList();

public ElectricEnchantingTableBlock(Properties properties) {
super(properties);
registerDefaultState(getStateDefinition()
.any()
.setValue(POWERED, false)
.setValue(OVERLOAD, true));
}

@Override
protected MapCodec<? extends BaseEntityBlock> codec() {
return simpleCodec(ElectricEnchantingTableBlock::new);
Expand Down Expand Up @@ -91,6 +100,24 @@ protected void createBlockStateDefinition(StateDefinition.Builder<Block, BlockSt
builder.add(POWERED).add(OVERLOAD);
}

public void animateTick(BlockState state, Level level, BlockPos pos, RandomSource random) {
super.animateTick(state, level, pos, random);
for (BlockPos blockpos : BOOKSHELF_OFFSETS) {
BlockPos bookshelfPos = pos.offset(blockpos);
if (random.nextInt(16) == 0 && level.getBlockState(bookshelfPos).getEnchantPowerBonus(level, bookshelfPos) != 0.0F) {
level.addParticle(
ParticleTypes.ENCHANT,
(double) pos.getX() + (double) 0.5F,
(double) pos.getY() + (double) 2.0F,
(double) pos.getZ() + (double) 0.5F,
(double) ((float) blockpos.getX() + random.nextFloat()) - (double) 0.5F,
(float) blockpos.getY() - random.nextFloat() - 1.0F,
(double) ((float) blockpos.getZ() + random.nextFloat()) - (double) 0.5F
);
}
}
}

@Override
public RenderShape getRenderShape(BlockState state) {
return RenderShape.MODEL;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,16 @@
import net.neoforged.neoforge.energy.EnergyStorage;
import org.jetbrains.annotations.Nullable;

import java.util.Objects;

@Getter
public class AdjustablePowerConverterBlockEntity extends BlockEntity
implements IPowerConsumer, IPowerProducer, MenuProvider {
private PowerGrid grid = null;
private int power = 0;
@Setter
private int powerTarget = 16;

@Setter
private int cooldown = 40;
private int time = 0;

public final EnergyStorage feEnergy = new EnergyStorage(128000000);
Expand All @@ -40,18 +42,19 @@ public AdjustablePowerConverterBlockEntity(BlockEntityType<?> type, BlockPos pos
super(type, pos, blockState);
}


@Override
protected void saveAdditional(CompoundTag tag, HolderLookup.Provider registries) {
super.saveAdditional(tag, registries);
tag.putInt("feEnergy", feEnergy.getEnergyStored());
protected void saveAdditional(CompoundTag tag, HolderLookup.Provider provider) {
super.saveAdditional(tag, provider);
tag.put("feEnergy", feEnergy.serializeNBT(provider));
tag.putInt("power", power);
tag.putInt("powerTarget", powerTarget);
}

@Override
public void loadAdditional(CompoundTag tag, HolderLookup.Provider registries) {
super.loadAdditional(tag, registries);
feEnergy.receiveEnergy(tag.getInt("feEnergy"), false);
public void loadAdditional(CompoundTag tag, HolderLookup.Provider provider) {
super.loadAdditional(tag, provider);
feEnergy.deserializeNBT(provider, Objects.requireNonNull(tag.get("feEnergy")));
power = tag.getInt("power");
powerTarget = tag.getInt("powerTarget");
}
Expand Down Expand Up @@ -133,6 +136,11 @@ private void kw2fe() {
return;
}

// 没有这个代码,就会虚空生电一小段时间
if (cooldown > 0) {
cooldown--;
return;
}
int feConverted = -power * AnvilCraft.CONFIG.powerConverter.powerConverterEfficiency;
feEnergy.receiveEnergy(feConverted, false);
}
Expand All @@ -142,10 +150,15 @@ public Component getDisplayName() {
return AddonBlocks.ADJUSTABLE_POWER_CONVERTER.get().getName();
}

public void setTarget(int powerTarget) {
this.powerTarget = powerTarget;
this.cooldown = 40;
}

@Override
public @Nullable AbstractContainerMenu createMenu(int i, Inventory inventory, Player player) {
if (player.isSpectator()) return null;
return new SliderMenu(i, this::setPowerTarget);
return new SliderMenu(i, this::setTarget);
}

public EnergyStorage getEnergyStorage() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package dev.anvilcraft.pigsplus.block.entity;

import dev.anvilcraft.pigsplus.block.ElectricEnchantingTableBlock;
import dev.anvilcraft.pigsplus.util.BlockUtil;
import dev.anvilcraft.pigsplus.util.ChiseledBookShelfUtil;
import dev.dubhe.anvilcraft.AnvilCraft;
import dev.dubhe.anvilcraft.api.IHasDisplayItem;
Expand All @@ -11,7 +10,6 @@
import dev.dubhe.anvilcraft.api.power.PowerGrid;
import dev.dubhe.anvilcraft.block.ChargerBlock;
import dev.dubhe.anvilcraft.block.entity.IFilterBlockEntity;
import dev.dubhe.anvilcraft.init.block.ModBlocks;
import dev.dubhe.anvilcraft.network.UpdateDisplayItemPacket;
import it.unimi.dsi.fastutil.objects.Object2IntMap;
import lombok.Getter;
Expand All @@ -30,7 +28,6 @@
import net.minecraft.world.item.enchantment.EnchantmentHelper;
import net.minecraft.world.item.enchantment.ItemEnchantments;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.state.BlockState;
Expand All @@ -50,10 +47,12 @@ public class ElectricEnchantingTableBlockEntity extends BlockEntity
@Getter
private int time = 0;
@Getter
private int maxPowerValue = 0;
public final int maxPowerValue = CONFIG.electricEnchantingTable.basePowerConsumptionLimit;
private int powerValue = 0;
@Getter
private double powerRate = 1;
@Getter
private int prevPowerValue = 0;
private int signalCache = 0;
@Getter
private final FilteredItemStackHandler itemHandler = new FilteredItemStackHandler(3) {
Expand Down Expand Up @@ -111,7 +110,6 @@ protected void saveAdditional(CompoundTag tag, HolderLookup.Provider provider) {
tag.put("Depository", itemHandler.serializeNBT(provider));
tag.putInt("time", time);
tag.putInt("powerValue", powerValue);
tag.putInt("maxPowerValue", maxPowerValue);
tag.putDouble("powerRate", powerRate);
}

Expand All @@ -121,7 +119,6 @@ public void loadAdditional(CompoundTag tag, HolderLookup.Provider provider) {
itemHandler.deserializeNBT(provider, tag.getCompound("Depository"));
time = tag.getInt("time");
powerValue = tag.getInt("powerValue");
maxPowerValue = tag.getInt("maxPowerValue");
powerRate = tag.getDouble("powerRate");
}

Expand All @@ -142,7 +139,6 @@ private void dropItemStack(ItemStack stack) {
@Override
public void gridTick() {
if (level == null || level.isClientSide()) return;
maxPowerValue = calcMaxPowerValue();
powerRate = calcPowerRate();
}

Expand All @@ -165,17 +161,17 @@ public void tick(Level level1, BlockPos blockPos) {
}
}

private void moveItemToTransformingSlot() {
protected void moveItemToTransformingSlot() {
ItemStack stack = itemHandler.getStackInSlot(0).copy();
itemHandler.setStackInSlot(0, ItemStack.EMPTY);
if (stack.isEmpty()) return;
if (!itemHandler.getStackInSlot(1).isEmpty()) return;

maxPowerValue = calcMaxPowerValue();
powerRate = calcPowerRate();
enchantments = getEnchantment();

int needPower = CalcPowerValue();
int needPower = CalcCostPowerValue();
prevPowerValue = needPower;
if (needPower > maxPowerValue | needPower <= 0) {
dropItemStack(stack);
return;
Expand All @@ -185,23 +181,25 @@ private void moveItemToTransformingSlot() {
time = CONFIG.electricEnchantingTable.workTick;
}

private int calcMaxPowerValue() {
int basePowerConsumptionLimit = CONFIG.electricEnchantingTable.basePowerConsumptionLimit;
if (level == null) return basePowerConsumptionLimit;
int coreCount = BlockUtil.countBlocks(level, getBlockPos(), 2, ModBlocks.MAGNETO_ELECTRIC_CORE_BLOCK);
return CONFIG.electricEnchantingTable.powerAddition * coreCount + basePowerConsumptionLimit;
}

private double calcPowerRate() {
protected double calcPowerRate() {
if (level == null) return 0;
int bookshelfCount = BlockUtil.countBlocks(level, getBlockPos(), 2, Blocks.BOOKSHELF);
return Math.pow(1 - CONFIG.electricEnchantingTable.decreasePowerRate, bookshelfCount);
float enchantPower = 0;
for (BlockPos blockPos : ElectricEnchantingTableBlock.BOOKSHELF_OFFSETS) {
BlockPos bookshelfPos = getBlockPos().offset(blockPos);
enchantPower += level.getBlockState(bookshelfPos).getEnchantPowerBonus(level, bookshelfPos);
}
return Math.pow(1 - CONFIG.electricEnchantingTable.decreasePowerRate, enchantPower);
}

private Map<Holder<Enchantment>, Integer> getEnchantment() {
protected Map<Holder<Enchantment>, Integer> getEnchantment() {
Map<Holder<Enchantment>, Integer> enchantments = new HashMap<>();
if (level == null) return enchantments;
List<Object2IntMap.Entry<Holder<Enchantment>>> enchants = ChiseledBookShelfUtil.countEnchantmentsInArea(level, getBlockPos(), 2);
List<Object2IntMap.Entry<Holder<Enchantment>>> enchants = ChiseledBookShelfUtil.countEnchantmentsInArea(
level,
getBlockPos(),
ElectricEnchantingTableBlock.BOOKSHELF_OFFSETS
);

// 遍历所有附魔并保留最高等级
for (Object2IntMap.Entry<Holder<Enchantment>> enchantment : enchants) {
Expand All @@ -212,7 +210,7 @@ private Map<Holder<Enchantment>, Integer> getEnchantment() {
return enchantments;
}

private int CalcPowerValue() {
protected int CalcCostPowerValue() {
int xpLevelCost = 0;
for (Map.Entry<Holder<Enchantment>, Integer> entry : enchantments.entrySet()) {
Holder<Enchantment> enchantmentType = entry.getKey();
Expand All @@ -231,7 +229,7 @@ private int CalcPowerValue() {
return (int) Math.ceil(powerFromEnchantments * powerRate);
}

private void moveItemToTransformedOverSlot() {
protected void moveItemToTransformedOverSlot() {
powerValue = 0;
ItemStack stack = itemHandler.getStackInSlot(1).copy();
if (stack.isEmpty()) return;
Expand All @@ -252,7 +250,7 @@ private void moveItemToTransformedOverSlot() {
}
}

private ItemStack enchant(ItemStack stack) {
protected ItemStack enchant(ItemStack stack) {
ItemStack result = stack.copy();
if (result.is(Items.BOOK)) result = stack.transmuteCopy(Items.ENCHANTED_BOOK);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@

@Config(name = AnvilCraftPigsPlus.MOD_ID, type = ModConfig.Type.SERVER)
public class AddonServerConfig {
// TODO:修复config不完全问题
// 自动皇家锻造台
@Comment("Maximum cooldown time of auto royal smithing table (in ticks)")
@BoundedDiscrete(min = 1, max = 80)
Expand All @@ -19,15 +18,10 @@ public class AddonServerConfig {
@CollapsibleObject
public ElectricEnchantingTable electricEnchantingTable = new ElectricEnchantingTable();

// 附魔发电机
@CollapsibleObject
public EnchantedGenerator enchantedGenerator = new EnchantedGenerator();


public static class ElectricEnchantingTable {
@Comment("Base power consumption limit for Electric Enchanting Table")
@BoundedDiscrete(min = 1, max = 32768)
public int basePowerConsumptionLimit = 1024;
public int basePowerConsumptionLimit = 8192;

@Comment("Linear Power Consumption Coefficient Based on Experience Level")
@BoundedDiscrete(min = 1, max = 2048)
Expand All @@ -39,17 +33,17 @@ public static class ElectricEnchantingTable {

@Comment("Work time for Electric Enchanting Table")
@BoundedDiscrete(min = 1, max = 6000)
public int workTick = 200;
public int workTick = 100;

@Comment("Power consumption rate decrease per bookShelf")
@Comment("Power consumption rate decrease per enchantPower")
@BoundedDiscrete(min = 0, max = 1)
public double decreasePowerRate = 0.02;

@Comment("Power consumption limit increase per core")
@BoundedDiscrete(min = 1, max = 16384)
public int powerAddition = 256;
public double decreasePowerRate = 0.06;
}

// 附魔发电机
@CollapsibleObject
public EnchantedGenerator enchantedGenerator = new EnchantedGenerator();

public static class EnchantedGenerator {
@Comment("Maximum power for Overclocking Enchanted Generator")
@BoundedDiscrete(min = 0, max = 128000000)
Expand Down
Loading