electricity optimization
This commit is contained in:
44
README.md
Normal file
44
README.md
Normal file
@@ -0,0 +1,44 @@
|
||||
<div align="center">
|
||||
<img src="https://cdn.modrinth.com/data/USgVjXsk/a8150331e2257d66e03e09478f17e121fcd3fdea_96.webp">
|
||||
<h1>Create: The Factory Must Grow</h1>
|
||||
<a href="https://www.curseforge.com/minecraft/mc-mods/create-industry"><picture><source srcset="https://img.shields.io/badge/CurseForge-202830?style=for-the-badge&logo=curseforge" media="(prefers-color-scheme: dark)"><img src="https://img.shields.io/badge/CurseForge-white?style=for-the-badge&logo=curseforge" alt="CurseForge"></picture></a>
|
||||
<a href="https://modrinth.com/mod/create-tfmg"><picture><source srcset="https://img.shields.io/badge/Modrinth-202830?style=for-the-badge&logo=modrinth" media="(prefers-color-scheme: dark)"><img src="https://img.shields.io/badge/Modrinth-white?style=for-the-badge&logo=modrinth" alt="Modrinth"></picture></a>
|
||||
<a href="https://discord.gg/HCRF9PYdSy"><picture><source srcset="https://img.shields.io/badge/Discord-202830?style=for-the-badge&logo=discord" media="(prefers-color-scheme: dark)"><img src="https://img.shields.io/badge/Discord-white?style=for-the-badge&logo=discord" alt="Discord"></picture></a>
|
||||
<br>
|
||||
<a>Heavy Engineering & Oil For The Create Mod</a>
|
||||
</div>
|
||||
|
||||
<br>
|
||||
|
||||
## Info
|
||||
|
||||
Create is by default a steam/clockpunk mod and most addons aim to expand this part of Create and do that pretty well,
|
||||
we thought the next natural expansion would be moving on from steampunk to dieselpunk.
|
||||
We believe that create could be later used not just as a single steampunk tech mod,
|
||||
but due to its modularity and polishedness, it is a perfect base for other tech mods aiming to Create (get it) something new with it,
|
||||
essentially using it as a library.
|
||||
We wanna be the first ones to try and prove this concept.
|
||||
|
||||
<br>
|
||||
|
||||
## Features
|
||||
|
||||
* Large Distilleries
|
||||
* Realistic Electricity
|
||||
* Steel Mills
|
||||
* Concrete
|
||||
* Electrolyzers
|
||||
* Steel
|
||||
* Aluminum
|
||||
* Cast Iron
|
||||
* Lead
|
||||
* Sulfur
|
||||
* OIL!!!
|
||||
* Quad Potato Cannon
|
||||
* Flamethrowers
|
||||
* And more..
|
||||
|
||||
<br>
|
||||
|
||||

|
||||
|
||||
@@ -25,7 +25,6 @@ public class ElectricBlockEntity extends SmartBlockEntity implements IElectric,
|
||||
public ElectricBlockValues data = new ElectricBlockValues(getPos());
|
||||
|
||||
|
||||
|
||||
public ElectricBlockEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
|
||||
super(type, pos, state);
|
||||
data.connectNextTick = true;
|
||||
@@ -34,7 +33,6 @@ public class ElectricBlockEntity extends SmartBlockEntity implements IElectric,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void addBehaviours(List<BlockEntityBehaviour> behaviours) {
|
||||
}
|
||||
@@ -44,32 +42,10 @@ public class ElectricBlockEntity extends SmartBlockEntity implements IElectric,
|
||||
return level;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean destroyed() {
|
||||
return data.destroyed;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElectricalNetwork getOrCreateElectricNetwork() {
|
||||
if (level.getBlockEntity(BlockPos.of(data.electricalNetworkId)) instanceof IElectric) {
|
||||
return TFMG.NETWORK_MANAGER.getOrCreateNetworkFor((IElectric) level.getBlockEntity(BlockPos.of(data.electricalNetworkId)));
|
||||
} else {
|
||||
ElectricNetworkManager.networks.get(getLevel())
|
||||
.remove(data.electricalNetworkId);
|
||||
return TFMG.NETWORK_MANAGER.getOrCreateNetworkFor(this);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void lazyTick() {
|
||||
super.lazyTick();
|
||||
if (data.failTimer >= 4) {
|
||||
this.blockFail();
|
||||
data.failTimer = 0;
|
||||
sendStuff();
|
||||
} else if ((data.voltage > getMaxVoltage() && getMaxVoltage() > 0) || (getCurrent() > getMaxCurrent()&&getMaxCurrent()>0)) {
|
||||
data.failTimer++;
|
||||
}
|
||||
lazyTickElectricity();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -78,127 +54,11 @@ public class ElectricBlockEntity extends SmartBlockEntity implements IElectric,
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public float resistance() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int voltageGeneration() {
|
||||
|
||||
int voltageGeneration = 0;
|
||||
|
||||
for (Direction direction : Direction.values()) {
|
||||
if (hasElectricitySlot(direction)) {
|
||||
|
||||
if (level.getBlockEntity(getBlockPos().relative(direction)) instanceof VoltageAlteringBlockEntity be)
|
||||
if (be.getData().getId() != getData().getId())
|
||||
if (be.getData().getVoltage() != 0)
|
||||
if (be.hasElectricitySlot(direction)) {
|
||||
voltageGeneration = Math.max(voltageGeneration, be.getOutputVoltage());
|
||||
data.getsOutsidePower = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (voltageGeneration == 0)
|
||||
data.getsOutsidePower = false;
|
||||
|
||||
return voltageGeneration;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public int powerGeneration() {
|
||||
|
||||
int powerGeneration = 0;
|
||||
|
||||
for (Direction direction : Direction.values()) {
|
||||
if (hasElectricitySlot(direction)) {
|
||||
|
||||
if (level.getBlockEntity(getBlockPos().relative(direction)) instanceof VoltageAlteringBlockEntity be&&be.canWork()) {
|
||||
|
||||
if (be.getData().getId() != getData().getId())
|
||||
if (be.getData().getVoltage() != 0)
|
||||
if (be.hasElectricitySlot(direction)) {
|
||||
powerGeneration = Math.max(powerGeneration, be.getPowerUsage()) + 1;
|
||||
if(powerGeneration>be.getNetworkPowerGeneration()) {
|
||||
powerGeneration = 0;
|
||||
be.data.updatePowerNextTick=true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return powerGeneration;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int frequencyGeneration() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateNextTick() {
|
||||
data.updateNextTick = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateNetwork() {
|
||||
getOrCreateElectricNetwork().updateNetwork();
|
||||
if (level instanceof ServerLevel serverLevel)
|
||||
CatnipServices.NETWORK.sendToClientsTrackingChunk(serverLevel, new ChunkPos(worldPosition),new NetworkUpdatePacket(BlockPos.of(getPos())));
|
||||
sendData();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendStuff() {
|
||||
sendData();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setVoltage(int newVoltage) {
|
||||
|
||||
|
||||
|
||||
if (canBeInGroups()) {
|
||||
data.voltage = (int) (((float) resistance() / data.group.resistance) * (float) data.voltageSupply);
|
||||
return;
|
||||
}
|
||||
data.voltage = newVoltage;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setFrequency(int newFrequency) {
|
||||
data.frequency = newFrequency;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setNetworkResistance(int newUsage) {
|
||||
data.networkResistance = newUsage;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getNetworkResistance() {
|
||||
return data.networkResistance;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void setNetwork(long network) {
|
||||
this.data.electricalNetworkId = network;
|
||||
if (network != getPos())
|
||||
ElectricNetworkManager.networks.get(getLevel())
|
||||
.remove(getPos());
|
||||
}
|
||||
|
||||
public boolean networkUndersupplied() {
|
||||
return getNetworkPowerUsage() > data.networkPowerGeneration;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
@@ -209,67 +69,28 @@ public class ElectricBlockEntity extends SmartBlockEntity implements IElectric,
|
||||
@Override
|
||||
public void remove() {
|
||||
super.remove();
|
||||
onRemoved();
|
||||
|
||||
this.data.destroyed = true;
|
||||
for (Direction d : Direction.values()) {
|
||||
if (hasElectricitySlot(d))
|
||||
if (getLevelAccessor().getBlockEntity(BlockPos.of(getPos()).relative(d)) instanceof IElectric be && be.hasElectricitySlot(d.getOpposite())) {
|
||||
ElectricNetworkManager.networks.get(getLevel())
|
||||
.remove(be.getPos());
|
||||
be.setNetwork(be.getPos());
|
||||
be.onPlaced();
|
||||
be.updateNextTick();
|
||||
}
|
||||
}
|
||||
if (data.electricalNetworkId != getPos())
|
||||
getOrCreateElectricNetwork().getMembers().remove(this);
|
||||
//
|
||||
if (data.electricalNetworkId == getPos())
|
||||
ElectricNetworkManager.networks.get(getLevel())
|
||||
.remove(getData().getId());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick() {
|
||||
super.tick();
|
||||
if (data.checkForLoopsNextTick) {
|
||||
getOrCreateElectricNetwork().checkForLoops(getBlockPos());
|
||||
data.checkForLoopsNextTick = false;
|
||||
}
|
||||
if (data.connectNextTick) {
|
||||
onPlaced();
|
||||
data.connectNextTick = false;
|
||||
}
|
||||
if (data.updateNextTick) {
|
||||
updateNetwork();
|
||||
data.updateNextTick = false;
|
||||
}
|
||||
|
||||
if (data.updatePowerNextTick) {
|
||||
updateUnpowered(new ArrayList<>());
|
||||
data.updatePowerNextTick = false;
|
||||
}
|
||||
if (data.setVoltageNextTick) {
|
||||
setVoltage(data.voltageSupply);
|
||||
data.setVoltageNextTick = false;
|
||||
}
|
||||
tickElectricity();
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void write(CompoundTag compound, HolderLookup.Provider registries, boolean clientPacket) {
|
||||
super.write(compound,registries , clientPacket);
|
||||
writeElectricity(compound,clientPacket);
|
||||
|
||||
compound.putInt("GroupId", data.group.id);
|
||||
compound.putFloat("GroupResistance", data.group.resistance);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void read(CompoundTag compound, HolderLookup.Provider registries, boolean clientPacket) {
|
||||
super.read(compound,registries , clientPacket);
|
||||
data.group = new ElectricalGroup(compound.getInt("GroupId"));
|
||||
data.group.resistance = compound.getFloat("GroupResistance");
|
||||
if (!clientPacket)
|
||||
data.connectNextTick = true;
|
||||
readElectricity(compound,clientPacket);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,6 +11,8 @@ import net.createmod.catnip.theme.Color;
|
||||
import net.minecraft.ChatFormatting;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Direction;
|
||||
import net.minecraft.core.HolderLookup;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.server.level.ServerLevel;
|
||||
import net.minecraft.world.level.ChunkPos;
|
||||
@@ -26,9 +28,19 @@ public interface IElectric {
|
||||
|
||||
LevelAccessor getLevelAccessor();
|
||||
|
||||
boolean destroyed();
|
||||
default boolean destroyed(){
|
||||
return getData().destroyed();
|
||||
}
|
||||
|
||||
ElectricalNetwork getOrCreateElectricNetwork();
|
||||
default ElectricalNetwork getOrCreateElectricNetwork() {
|
||||
if (getLevelAccessor().getBlockEntity(BlockPos.of(getData().electricalNetworkId)) instanceof IElectric) {
|
||||
return TFMG.NETWORK_MANAGER.getOrCreateNetworkFor((IElectric) getLevelAccessor().getBlockEntity(BlockPos.of(getData().electricalNetworkId)));
|
||||
} else {
|
||||
ElectricNetworkManager.networks.get(getLevelAccessor())
|
||||
.remove(getData().electricalNetworkId);
|
||||
return TFMG.NETWORK_MANAGER.getOrCreateNetworkFor(this);
|
||||
}
|
||||
}
|
||||
|
||||
default boolean hasElectricitySlot(Direction direction) {
|
||||
return true;
|
||||
@@ -43,35 +55,82 @@ public interface IElectric {
|
||||
getData().electricalNetworkId = getPos();
|
||||
network.add(this);
|
||||
|
||||
BlockPos pos = BlockPos.of(getPos());
|
||||
|
||||
getData().checkForLoopsNextTick = true;
|
||||
getOrCreateElectricNetwork().checkForLoops(BlockPos.of(getPos()));
|
||||
/// ////
|
||||
|
||||
|
||||
// for (Direction d : Direction.values()) {
|
||||
// if (hasElectricitySlot(d))
|
||||
// if (getLevelAccessor().getBlockEntity(pos.relative(d)) instanceof IElectric be) {
|
||||
// if (be.hasElectricitySlot(d.getOpposite())) {
|
||||
// if (!be.destroyed()) {
|
||||
//
|
||||
//
|
||||
// for(IElectric member : be.getOrCreateElectricNetwork().members){
|
||||
// network.add(member);
|
||||
// member.setNetwork(this.getData().electricalNetworkId);
|
||||
//
|
||||
// }
|
||||
//
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
updateNextTick();
|
||||
|
||||
onConnected();
|
||||
sendStuff();
|
||||
|
||||
}
|
||||
default void onRemoved(){
|
||||
this.getData().destroyed = true;
|
||||
for (Direction d : Direction.values()) {
|
||||
if (hasElectricitySlot(d))
|
||||
if (getLevelAccessor().getBlockEntity(BlockPos.of(getPos()).relative(d)) instanceof IElectric be && be.hasElectricitySlot(d.getOpposite())) {
|
||||
ElectricNetworkManager.networks.get(getLevelAccessor())
|
||||
.remove(be.getPos());
|
||||
be.setNetwork(be.getPos());
|
||||
be.onPlaced();
|
||||
be.updateNextTick();
|
||||
}
|
||||
}
|
||||
if (getData().electricalNetworkId != getPos())
|
||||
getOrCreateElectricNetwork().getMembers().remove(this);
|
||||
//
|
||||
if (getData().electricalNetworkId == getPos())
|
||||
ElectricNetworkManager.networks.get(getLevelAccessor())
|
||||
.remove(getData().getId());
|
||||
}
|
||||
|
||||
default void readElectricity(CompoundTag compound, boolean clientPacket){
|
||||
getData().group = new ElectricalGroup(compound.getInt("GroupId"));
|
||||
getData().group.resistance = compound.getFloat("GroupResistance");
|
||||
if (!clientPacket)
|
||||
getData().connectNextTick = true;
|
||||
}
|
||||
|
||||
default void writeElectricity(CompoundTag compound, boolean clientPacket){
|
||||
compound.putInt("GroupId", getData().group.id);
|
||||
compound.putFloat("GroupResistance", getData().group.resistance);
|
||||
}
|
||||
|
||||
default void tickElectricity(){
|
||||
if (getData().checkForLoopsNextTick) {
|
||||
getOrCreateElectricNetwork().checkForLoops(getBlockPos());
|
||||
getData().checkForLoopsNextTick = false;
|
||||
}
|
||||
if (getData().connectNextTick) {
|
||||
onPlaced();
|
||||
getData().connectNextTick = false;
|
||||
}
|
||||
if (getData().updateNextTick) {
|
||||
updateNetwork();
|
||||
getData().updateNextTick = false;
|
||||
}
|
||||
|
||||
if (getData().updatePowerNextTick) {
|
||||
updateUnpowered(new ArrayList<>());
|
||||
getData().updatePowerNextTick = false;
|
||||
}
|
||||
if (getData().setVoltageNextTick) {
|
||||
setVoltage(getData().voltageSupply);
|
||||
getData().setVoltageNextTick = false;
|
||||
}
|
||||
}
|
||||
default void lazyTickElectricity(){
|
||||
if (getData().failTimer >= 4) {
|
||||
this.blockFail();
|
||||
getData().failTimer = 0;
|
||||
sendStuff();
|
||||
} else if ((getData().voltage > getMaxVoltage() && getMaxVoltage() > 0) || (getCurrent() > getMaxCurrent()&&getMaxCurrent()>0)) {
|
||||
getData().failTimer++;
|
||||
}
|
||||
}
|
||||
|
||||
default int getMaxVoltage() {
|
||||
return 0;
|
||||
@@ -106,6 +165,10 @@ public interface IElectric {
|
||||
|
||||
}
|
||||
|
||||
default BlockPos getBlockPos(){
|
||||
return BlockPos.of(getPos());
|
||||
}
|
||||
|
||||
default void updateUnpowered(List<BlockPos> alreadyChecked) {
|
||||
alreadyChecked.add(BlockPos.of(getPos()));
|
||||
updateNextTick();
|
||||
@@ -276,15 +339,69 @@ public interface IElectric {
|
||||
}
|
||||
|
||||
|
||||
float resistance();
|
||||
default float resistance(){
|
||||
return 0;
|
||||
}
|
||||
|
||||
int voltageGeneration();
|
||||
|
||||
int powerGeneration();
|
||||
default int voltageGeneration() {
|
||||
|
||||
int frequencyGeneration();
|
||||
int voltageGeneration = 0;
|
||||
|
||||
for (Direction direction : Direction.values()) {
|
||||
if (hasElectricitySlot(direction)) {
|
||||
|
||||
if (getLevelAccessor().getBlockEntity(getBlockPos().relative(direction)) instanceof VoltageAlteringBlockEntity be)
|
||||
if (be.getData().getId() != getData().getId())
|
||||
if (be.getData().getVoltage() != 0)
|
||||
if (be.hasElectricitySlot(direction)) {
|
||||
voltageGeneration = Math.max(voltageGeneration, be.getOutputVoltage());
|
||||
getData().getsOutsidePower = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (voltageGeneration == 0)
|
||||
getData().getsOutsidePower = false;
|
||||
|
||||
return voltageGeneration;
|
||||
}
|
||||
|
||||
|
||||
|
||||
default int powerGeneration() {
|
||||
|
||||
int powerGeneration = 0;
|
||||
|
||||
for (Direction direction : Direction.values()) {
|
||||
if (hasElectricitySlot(direction)) {
|
||||
|
||||
if (getLevelAccessor().getBlockEntity(getBlockPos().relative(direction)) instanceof VoltageAlteringBlockEntity be&&be.canWork()) {
|
||||
|
||||
if (be.getData().getId() != getData().getId())
|
||||
if (be.getData().getVoltage() != 0)
|
||||
if (be.hasElectricitySlot(direction)) {
|
||||
powerGeneration = Math.max(powerGeneration, be.getPowerUsage()) + 1;
|
||||
if(powerGeneration>be.getNetworkPowerGeneration()) {
|
||||
powerGeneration = 0;
|
||||
be.data.updatePowerNextTick=true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return powerGeneration;
|
||||
}
|
||||
|
||||
default int getNetworkResistance() {
|
||||
return getData().networkResistance;
|
||||
}
|
||||
|
||||
default boolean networkUndersupplied() {
|
||||
return getNetworkPowerUsage() > getData().networkPowerGeneration;
|
||||
}
|
||||
|
||||
int getNetworkResistance();
|
||||
|
||||
default int getMaxAmps() {
|
||||
return (int) getCurrent();
|
||||
@@ -307,20 +424,44 @@ public interface IElectric {
|
||||
return current;
|
||||
}
|
||||
|
||||
void updateNextTick();
|
||||
default void updateNextTick(){
|
||||
getData().updateNextTick = true;
|
||||
}
|
||||
|
||||
void updateNetwork();
|
||||
default void updateNetwork() {
|
||||
getOrCreateElectricNetwork().updateNetwork();
|
||||
if (getLevelAccessor() instanceof ServerLevel serverLevel)
|
||||
CatnipServices.NETWORK.sendToClientsTrackingChunk(serverLevel, new ChunkPos(getBlockPos()),new NetworkUpdatePacket(BlockPos.of(getPos())));
|
||||
sendStuff();
|
||||
}
|
||||
|
||||
void sendStuff();
|
||||
|
||||
void setVoltage(int newVoltage);
|
||||
|
||||
void setFrequency(int newFrequency);
|
||||
|
||||
void setNetworkResistance(int newUsage);
|
||||
default void setVoltage(int newVoltage) {
|
||||
|
||||
|
||||
void setNetwork(long network);
|
||||
|
||||
if (canBeInGroups()) {
|
||||
getData().voltage = (int) (((float) resistance() / getData().group.resistance) * (float) getData().voltageSupply);
|
||||
return;
|
||||
}
|
||||
getData().voltage = newVoltage;
|
||||
}
|
||||
|
||||
|
||||
default void setNetworkResistance(int newUsage){
|
||||
getData().networkResistance = newUsage;
|
||||
}
|
||||
|
||||
|
||||
|
||||
default void setNetwork(long network) {
|
||||
getData().electricalNetworkId = network;
|
||||
if (network != getPos())
|
||||
ElectricNetworkManager.networks.get(getLevelAccessor())
|
||||
.remove(getPos());
|
||||
}
|
||||
|
||||
default boolean canBeInGroups() {
|
||||
return false;
|
||||
|
||||
@@ -26,10 +26,6 @@ import java.util.List;
|
||||
public class KineticElectricBlockEntity extends GeneratingKineticBlockEntity implements IElectric, IHaveGoggleInformation, IHaveHoveringInformation {
|
||||
|
||||
public ElectricBlockValues data = new ElectricBlockValues(getPos());
|
||||
int powerPercentage = 100;
|
||||
|
||||
int timer = 0;
|
||||
|
||||
|
||||
public KineticElectricBlockEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
|
||||
super(type, pos, state);
|
||||
@@ -39,42 +35,16 @@ public class KineticElectricBlockEntity extends GeneratingKineticBlockEntity imp
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void addBehaviours(List<BlockEntityBehaviour> behaviours) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public LevelAccessor getLevelAccessor() {
|
||||
return level;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean destroyed() {
|
||||
return data.destroyed;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElectricalNetwork getOrCreateElectricNetwork() {
|
||||
if (level.getBlockEntity(BlockPos.of(data.electricalNetworkId)) instanceof IElectric) {
|
||||
return TFMG.NETWORK_MANAGER.getOrCreateNetworkFor((IElectric) level.getBlockEntity(BlockPos.of(data.electricalNetworkId)));
|
||||
} else {
|
||||
ElectricNetworkManager.networks.get(getLevel())
|
||||
.remove(data.electricalNetworkId);
|
||||
return TFMG.NETWORK_MANAGER.getOrCreateNetworkFor(this);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void lazyTick() {
|
||||
super.lazyTick();
|
||||
if (data.failTimer >= 4) {
|
||||
this.blockFail();
|
||||
data.failTimer = 0;
|
||||
sendStuff();
|
||||
} else if ((data.voltage > getMaxVoltage() && getMaxVoltage() > 0) || (getCurrent() > getMaxCurrent() && getMaxCurrent() > 0)) {
|
||||
data.failTimer++;
|
||||
}
|
||||
lazyTickElectricity();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -83,123 +53,13 @@ public class KineticElectricBlockEntity extends GeneratingKineticBlockEntity imp
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public float resistance() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int voltageGeneration() {
|
||||
|
||||
int voltageGeneration = 0;
|
||||
|
||||
for (Direction direction : Direction.values()) {
|
||||
if (hasElectricitySlot(direction)) {
|
||||
|
||||
if (level.getBlockEntity(getBlockPos().relative(direction)) instanceof VoltageAlteringBlockEntity be)
|
||||
if (be.getData().getId() != getData().getId())
|
||||
if (be.getData().getVoltage() != 0)
|
||||
if (be.hasElectricitySlot(direction)) {
|
||||
voltageGeneration = Math.max(voltageGeneration, be.getOutputVoltage());
|
||||
data.getsOutsidePower = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (voltageGeneration == 0)
|
||||
data.getsOutsidePower = false;
|
||||
|
||||
return voltageGeneration;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public int powerGeneration() {
|
||||
|
||||
int powerGeneration = 0;
|
||||
|
||||
for (Direction direction : Direction.values()) {
|
||||
if (hasElectricitySlot(direction)) {
|
||||
|
||||
if (level.getBlockEntity(getBlockPos().relative(direction)) instanceof VoltageAlteringBlockEntity be && be.canWork()) {
|
||||
|
||||
if (be.getData().getId() != getData().getId())
|
||||
if (be.getData().getVoltage() != 0)
|
||||
if (be.hasElectricitySlot(direction)) {
|
||||
powerGeneration = Math.max(powerGeneration, be.getPowerUsage()) + 1;
|
||||
if (powerGeneration > be.getNetworkPowerGeneration()) {
|
||||
powerGeneration = 0;
|
||||
be.data.updatePowerNextTick = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return powerGeneration;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int frequencyGeneration() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateNextTick() {
|
||||
data.updateNextTick = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateNetwork() {
|
||||
getOrCreateElectricNetwork().updateNetwork();
|
||||
if (level instanceof ServerLevel serverLevel)
|
||||
CatnipServices.NETWORK.sendToClientsTrackingChunk(serverLevel, new ChunkPos(worldPosition),new NetworkUpdatePacket(BlockPos.of(getPos())));
|
||||
sendData();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendStuff() {
|
||||
sendData();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setVoltage(int newVoltage) {
|
||||
|
||||
|
||||
if (canBeInGroups()) {
|
||||
data.voltage = (int) (((float) resistance() / data.group.resistance) * (float) data.voltageSupply);
|
||||
return;
|
||||
}
|
||||
data.voltage = newVoltage;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setFrequency(int newFrequency) {
|
||||
data.frequency = newFrequency;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setNetworkResistance(int newUsage) {
|
||||
data.networkResistance = newUsage;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getNetworkResistance() {
|
||||
return data.networkResistance;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void setNetwork(long network) {
|
||||
this.data.electricalNetworkId = network;
|
||||
if (network != getPos())
|
||||
ElectricNetworkManager.networks.get(getLevel())
|
||||
.remove(getPos());
|
||||
}
|
||||
|
||||
public boolean networkUndersupplied() {
|
||||
return getNetworkPowerUsage() > data.networkPowerGeneration;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
@@ -210,68 +70,26 @@ public class KineticElectricBlockEntity extends GeneratingKineticBlockEntity imp
|
||||
@Override
|
||||
public void remove() {
|
||||
super.remove();
|
||||
|
||||
this.data.destroyed = true;
|
||||
for (Direction d : Direction.values()) {
|
||||
if (hasElectricitySlot(d))
|
||||
if (getLevelAccessor().getBlockEntity(BlockPos.of(getPos()).relative(d)) instanceof IElectric be && be.hasElectricitySlot(d.getOpposite())) {
|
||||
ElectricNetworkManager.networks.get(getLevel())
|
||||
.remove(be.getPos());
|
||||
be.setNetwork(be.getPos());
|
||||
be.onPlaced();
|
||||
be.updateNextTick();
|
||||
}
|
||||
}
|
||||
if (data.electricalNetworkId != getPos())
|
||||
getOrCreateElectricNetwork().getMembers().remove(this);
|
||||
//
|
||||
if (data.electricalNetworkId == getPos())
|
||||
ElectricNetworkManager.networks.get(getLevel())
|
||||
.remove(getData().getId());
|
||||
onRemoved();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick() {
|
||||
super.tick();
|
||||
if (data.checkForLoopsNextTick) {
|
||||
getOrCreateElectricNetwork().checkForLoops(getBlockPos());
|
||||
data.checkForLoopsNextTick = false;
|
||||
}
|
||||
if (data.connectNextTick) {
|
||||
onPlaced();
|
||||
data.connectNextTick = false;
|
||||
}
|
||||
if (data.updateNextTick) {
|
||||
updateNetwork();
|
||||
data.updateNextTick = false;
|
||||
}
|
||||
|
||||
if (data.updatePowerNextTick) {
|
||||
updateUnpowered(new ArrayList<>());
|
||||
data.updatePowerNextTick = false;
|
||||
}
|
||||
if (data.setVoltageNextTick) {
|
||||
setVoltage(data.voltageSupply);
|
||||
data.setVoltageNextTick = false;
|
||||
}
|
||||
tickElectricity();
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void write(CompoundTag compound, HolderLookup.Provider registries, boolean clientPacket) {
|
||||
super.write(compound,registries , clientPacket);
|
||||
|
||||
compound.putInt("GroupId", data.group.id);
|
||||
compound.putFloat("GroupResistance", data.group.resistance);
|
||||
writeElectricity(compound,clientPacket);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void read(CompoundTag compound, HolderLookup.Provider registries, boolean clientPacket) {
|
||||
super.read(compound,registries , clientPacket);
|
||||
data.group = new ElectricalGroup(compound.getInt("GroupId"));
|
||||
data.group.resistance = compound.getFloat("GroupResistance");
|
||||
if (!clientPacket)
|
||||
data.connectNextTick = true;
|
||||
readElectricity(compound,clientPacket);
|
||||
}
|
||||
|
||||
|
||||
@@ -281,7 +99,7 @@ public class KineticElectricBlockEntity extends GeneratingKineticBlockEntity imp
|
||||
|
||||
if (this instanceof RegularEngineBlockEntity)
|
||||
notifyNetworkAboutSpeedChange();
|
||||
timer = 0;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -31,8 +31,6 @@ public class CopycatCableBlockEntity extends CopycatBlockEntity implements IElec
|
||||
|
||||
public ElectricBlockValues data = new ElectricBlockValues(getPos());
|
||||
|
||||
int powerPercentage = 100;
|
||||
boolean setNextTick = true;
|
||||
public CopycatCableBlockEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
|
||||
super(type, pos, state);
|
||||
data.connectNextTick = true;
|
||||
@@ -40,38 +38,19 @@ public class CopycatCableBlockEntity extends CopycatBlockEntity implements IElec
|
||||
data.group = new ElectricalGroup(-1);
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public boolean hasCustomMaterial() {
|
||||
return !AllBlocks.COPYCAT_BASE.has(getMaterial());
|
||||
}
|
||||
@Override
|
||||
public void addBehaviours(List<BlockEntityBehaviour> behaviours) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public LevelAccessor getLevelAccessor() {
|
||||
return level;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean destroyed() {
|
||||
return data.destroyed;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElectricalNetwork getOrCreateElectricNetwork() {
|
||||
if (level.getBlockEntity(BlockPos.of(data.electricalNetworkId)) instanceof IElectric) {
|
||||
return TFMG.NETWORK_MANAGER.getOrCreateNetworkFor((IElectric) level.getBlockEntity(BlockPos.of(data.electricalNetworkId)));
|
||||
} else {
|
||||
ElectricNetworkManager.networks.get(getLevel())
|
||||
.remove(data.electricalNetworkId);
|
||||
return TFMG.NETWORK_MANAGER.getOrCreateNetworkFor(this);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void lazyTick() {
|
||||
super.lazyTick();
|
||||
lazyTickElectricity();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -80,116 +59,14 @@ public class CopycatCableBlockEntity extends CopycatBlockEntity implements IElec
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public float resistance() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int voltageGeneration() {
|
||||
|
||||
int voltageGeneration = 0;
|
||||
|
||||
for (Direction direction : Direction.values()) {
|
||||
if (hasElectricitySlot(direction)) {
|
||||
|
||||
if (level.getBlockEntity(getBlockPos().relative(direction)) instanceof VoltageAlteringBlockEntity be)
|
||||
if (be.getData().getId() != getData().getId())
|
||||
if (be.getData().getVoltage() != 0)
|
||||
if (be.hasElectricitySlot(direction)) {
|
||||
voltageGeneration = Math.max(voltageGeneration, be.getOutputVoltage());
|
||||
data.getsOutsidePower = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (voltageGeneration == 0)
|
||||
data.getsOutsidePower = false;
|
||||
|
||||
return voltageGeneration;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int powerGeneration() {
|
||||
|
||||
int powerGeneration = 0;
|
||||
|
||||
for (Direction direction : Direction.values()) {
|
||||
if (hasElectricitySlot(direction)) {
|
||||
|
||||
if (level.getBlockEntity(getBlockPos().relative(direction)) instanceof VoltageAlteringBlockEntity be) {
|
||||
if (be.getData().getId() != getData().getId())
|
||||
if (be.getData().getVoltage() != 0)
|
||||
if (be.hasElectricitySlot(direction)) {
|
||||
powerGeneration = Math.max(powerGeneration, be.getPowerUsage()) + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return powerGeneration;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int frequencyGeneration() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateNextTick() {
|
||||
data.updateNextTick = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateNetwork() {
|
||||
getOrCreateElectricNetwork().updateNetwork();
|
||||
if (level instanceof ServerLevel serverLevel)
|
||||
CatnipServices.NETWORK.sendToClientsTrackingChunk(serverLevel, new ChunkPos(worldPosition),new NetworkUpdatePacket(BlockPos.of(getPos())));
|
||||
|
||||
sendData();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendStuff() {
|
||||
sendData();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setVoltage(int newVoltage) {
|
||||
if (canBeInGroups()) {
|
||||
data.voltage = (int) (((float) resistance() / data.group.resistance) * (float) data.voltageSupply);
|
||||
return;
|
||||
}
|
||||
data.voltage = newVoltage;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setFrequency(int newFrequency) {
|
||||
data.frequency = newFrequency;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setNetworkResistance(int newUsage) {
|
||||
data.networkResistance = newUsage;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getNetworkResistance() {
|
||||
return data.networkResistance;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setNetwork(long network) {
|
||||
this.data.electricalNetworkId = network;
|
||||
if (network != getPos())
|
||||
ElectricNetworkManager.networks.get(getLevel())
|
||||
.remove(getPos());
|
||||
}
|
||||
|
||||
public boolean networkUndersupplied() {
|
||||
return getNetworkPowerUsage() > data.networkPowerGeneration;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public long getPos() {
|
||||
@@ -199,52 +76,20 @@ public class CopycatCableBlockEntity extends CopycatBlockEntity implements IElec
|
||||
@Override
|
||||
public void remove() {
|
||||
super.remove();
|
||||
this.data.destroyed = true;
|
||||
for (Direction d : Direction.values()) {
|
||||
if (hasElectricitySlot(d))
|
||||
if (getLevelAccessor().getBlockEntity(BlockPos.of(getPos()).relative(d)) instanceof IElectric be && be.hasElectricitySlot(d.getOpposite())) {
|
||||
ElectricNetworkManager.networks.get(getLevel())
|
||||
.remove(be.getPos());
|
||||
be.setNetwork(be.getPos());
|
||||
be.onPlaced();
|
||||
be.updateNextTick();
|
||||
}
|
||||
}
|
||||
if (data.electricalNetworkId != getPos())
|
||||
getOrCreateElectricNetwork().getMembers().remove(this);
|
||||
|
||||
if (data.electricalNetworkId == getPos())
|
||||
ElectricNetworkManager.networks.get(getLevel())
|
||||
.remove(getData().getId());
|
||||
onRemoved();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick() {
|
||||
super.tick();
|
||||
if (data.connectNextTick) {
|
||||
onPlaced();
|
||||
data.connectNextTick = false;
|
||||
}
|
||||
if (data.updateNextTick) {
|
||||
updateNetwork();
|
||||
data.updateNextTick = false;
|
||||
}
|
||||
if (data.setVoltageNextTick) {
|
||||
setVoltage(data.voltageSupply);
|
||||
data.setVoltageNextTick = false;
|
||||
}
|
||||
//if(setNextTick) {
|
||||
// setMaterial(TFMGBlocks.COPYCAT_CABLE_BASE.getDefaultState());
|
||||
// setNextTick = false;
|
||||
//}
|
||||
tickElectricity();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void write(CompoundTag compound, HolderLookup.Provider registries, boolean clientPacket) {
|
||||
super.write(compound,registries , clientPacket);
|
||||
|
||||
compound.putInt("GroupId", data.group.id);
|
||||
compound.putFloat("GroupResistance", data.group.resistance);
|
||||
writeElectricity(compound,clientPacket);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -264,9 +109,6 @@ public class CopycatCableBlockEntity extends CopycatBlockEntity implements IElec
|
||||
}
|
||||
|
||||
//
|
||||
data.group = new ElectricalGroup(compound.getInt("GroupId"));
|
||||
data.group.resistance = compound.getFloat("GroupResistance");
|
||||
if (!clientPacket)
|
||||
data.connectNextTick = true;
|
||||
readElectricity(compound,clientPacket);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,11 +3,14 @@ package com.drmangotea.tfmg.content.electricity.utilities.electric_motor;
|
||||
import com.drmangotea.tfmg.TFMG;
|
||||
import com.drmangotea.tfmg.config.MachineConfig;
|
||||
import com.drmangotea.tfmg.config.TFMGConfigs;
|
||||
import com.drmangotea.tfmg.content.electricity.base.IElectric;
|
||||
import com.drmangotea.tfmg.content.electricity.base.KineticElectricBlockEntity;
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import com.simibubi.create.content.contraptions.bearing.WindmillBearingBlockEntity;
|
||||
import com.simibubi.create.content.kinetics.motor.KineticScrollValueBehaviour;
|
||||
import com.simibubi.create.foundation.blockEntity.behaviour.BlockEntityBehaviour;
|
||||
import com.simibubi.create.foundation.blockEntity.behaviour.ValueBoxTransform;
|
||||
import com.simibubi.create.foundation.blockEntity.behaviour.scrollValue.ScrollOptionBehaviour;
|
||||
import com.simibubi.create.foundation.blockEntity.behaviour.scrollValue.ScrollValueBehaviour;
|
||||
import com.simibubi.create.foundation.utility.CreateLang;
|
||||
import dev.engine_room.flywheel.lib.transform.TransformStack;
|
||||
@@ -28,120 +31,118 @@ import static com.simibubi.create.content.kinetics.base.DirectionalKineticBlock.
|
||||
|
||||
public class ElectricMotorBlockEntity extends KineticElectricBlockEntity {
|
||||
|
||||
public static final int DEFAULT_SPEED = 64;
|
||||
public static final int MAX_SPEED = 256;
|
||||
protected ScrollValueBehaviour generatedSpeed;
|
||||
|
||||
|
||||
public boolean delayedUpdate = false;
|
||||
|
||||
public float testSpeed = 0;
|
||||
|
||||
|
||||
protected ScrollOptionBehaviour<WindmillBearingBlockEntity.RotationDirection> movementDirection;
|
||||
|
||||
public ElectricMotorBlockEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
|
||||
super(type, pos, state);
|
||||
updateGeneratedRotation();
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPlaced() {
|
||||
super.onPlaced();
|
||||
for(IElectric member : getOrCreateElectricNetwork().members){
|
||||
if(member instanceof ElectricMotorBlockEntity be)
|
||||
be.delayedUpdate = true;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public void tick() {
|
||||
super.tick();
|
||||
|
||||
|
||||
|
||||
if(delayedUpdate){
|
||||
updateNextTick();
|
||||
updateGeneratedRotation();
|
||||
delayedUpdate = false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addBehaviours(List<BlockEntityBehaviour> behaviours) {
|
||||
super.addBehaviours(behaviours);
|
||||
int max = MAX_SPEED;
|
||||
generatedSpeed = new KineticScrollValueBehaviour(CreateLang.translateDirect("kinetics.creative_motor.rotation_speed"),
|
||||
this, new MotorValueBox());
|
||||
generatedSpeed.between(-max, max);
|
||||
generatedSpeed.value = DEFAULT_SPEED;
|
||||
generatedSpeed.withCallback(i -> this.updateGeneratedRotation());
|
||||
behaviours.add(generatedSpeed);
|
||||
movementDirection = new ScrollOptionBehaviour<>(WindmillBearingBlockEntity.RotationDirection.class,
|
||||
CreateLang.translateDirect("contraptions.windmill.rotation_direction"), this, new MotorValueBox());
|
||||
|
||||
movementDirection.withCallback($ -> onDirectionChanged());
|
||||
behaviours.add(movementDirection);
|
||||
}
|
||||
|
||||
private void onDirectionChanged() {
|
||||
updateNextTick();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public boolean hasElectricitySlot(Direction direction) {
|
||||
return direction == getBlockState().getValue(FACING).getOpposite() || (direction.getAxis().isHorizontal() && direction == Direction.DOWN);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notifyNetworkAboutSpeedChange() {
|
||||
super.notifyNetworkAboutSpeedChange();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void write(CompoundTag compound, HolderLookup.Provider registries, boolean clientPacket) {
|
||||
super.write(compound,registries , clientPacket);
|
||||
compound.putFloat("MotorSpeed",getSpeed());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void read(CompoundTag compound, HolderLookup.Provider registries, boolean clientPacket) {
|
||||
super.read(compound,registries , clientPacket);
|
||||
testSpeed = compound.getFloat("MotorSpeed");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNetworkChanged(int oldVoltage, int oldPower) {
|
||||
if (oldPower != getPowerUsage() || oldVoltage != data.voltage) {
|
||||
updateGeneratedRotation();
|
||||
//if (oldPower != getPowerUsage() || oldVoltage != data.voltage) {
|
||||
delayedUpdate = true;
|
||||
notifyUpdate();
|
||||
// }
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initialize() {
|
||||
super.initialize();
|
||||
if (!hasSource() || getPowerUsage()>0)
|
||||
updateNextTick();
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getGeneratedSpeed() {
|
||||
|
||||
MachineConfig machineConfig = TFMGConfigs.common().machines;
|
||||
|
||||
//if(getPowerUsage() <machineConfig.electricMotorMinimumPower.get())
|
||||
// return 0;
|
||||
if(networkUndersupplied())
|
||||
return 0;
|
||||
if (!canWork())
|
||||
return 0;
|
||||
//if(getPowerUsage() >= machineConfig.electricMotorMinimumPower.get()){
|
||||
float speed = generatedSpeed.getValue() <0 ? -Math.min(Math.abs(data.getVoltage()/2),Math.abs(generatedSpeed.getValue())) : Math.min(Math.abs(data.getVoltage()/2),Math.abs(generatedSpeed.getValue()));
|
||||
|
||||
if(speed==0){
|
||||
return testSpeed;
|
||||
}
|
||||
int rotation = movementDirection.get() == WindmillBearingBlockEntity.RotationDirection.CLOCKWISE ? 1 : -1;
|
||||
|
||||
float speed = Math.min(255,data.getVoltage()*.8f)*rotation;
|
||||
|
||||
testSpeed = 0;
|
||||
return speed;
|
||||
|
||||
|
||||
//}
|
||||
|
||||
//return 0;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean canBeInGroups() {
|
||||
return true;
|
||||
public float calculateAddedStressCapacity() {
|
||||
float speedModifier = getSpeed()/256;
|
||||
|
||||
|
||||
return (int)(super.calculateAddedStressCapacity()*speedModifier);
|
||||
}
|
||||
|
||||
|
||||
|
||||
//@Override
|
||||
//public boolean canBeInGroups() {
|
||||
// return true;
|
||||
//}
|
||||
@Override
|
||||
public float resistance() {
|
||||
|
||||
return TFMGConfigs.common().machines.electricMotorInternalResistance.getF();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getPowerUsage() {
|
||||
|
||||
if (Math.min(generatedSpeed.getValue(), data.getVoltage() / 2) == 0)
|
||||
return super.getPowerUsage();
|
||||
|
||||
float speedModifier = (Math.min(Math.abs(generatedSpeed.getValue()), data.getVoltage()) / 256f) * 5;
|
||||
|
||||
|
||||
return (int) ((float) super.getPowerUsage() * speedModifier);
|
||||
}
|
||||
|
||||
class MotorValueBox extends ValueBoxTransform.Sided {
|
||||
|
||||
@Override
|
||||
|
||||
@@ -37,7 +37,7 @@ import static com.simibubi.create.content.kinetics.base.DirectionalKineticBlock.
|
||||
public class ElectricPumpBlockEntity extends PumpBlockEntity implements IElectric {
|
||||
|
||||
public ElectricBlockValues data = new ElectricBlockValues(getPos());
|
||||
int powerPercentage = 100;
|
||||
|
||||
|
||||
public ElectricPumpBlockEntity(BlockEntityType<?> typeIn, BlockPos pos, BlockState state) {
|
||||
super(typeIn, pos, state);
|
||||
@@ -208,25 +208,12 @@ public class ElectricPumpBlockEntity extends PumpBlockEntity implements IElectri
|
||||
return level;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean destroyed() {
|
||||
return data.destroyed;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ElectricalNetwork getOrCreateElectricNetwork() {
|
||||
if (level.getBlockEntity(BlockPos.of(data.electricalNetworkId)) instanceof IElectric) {
|
||||
return TFMG.NETWORK_MANAGER.getOrCreateNetworkFor((IElectric) level.getBlockEntity(BlockPos.of(data.electricalNetworkId)));
|
||||
} else {
|
||||
ElectricNetworkManager.networks.get(getLevel())
|
||||
.remove(data.electricalNetworkId);
|
||||
return TFMG.NETWORK_MANAGER.getOrCreateNetworkFor(this);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void lazyTick() {
|
||||
super.lazyTick();
|
||||
lazyTickElectricity();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -235,8 +222,6 @@ public class ElectricPumpBlockEntity extends PumpBlockEntity implements IElectri
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public float resistance() {
|
||||
return 100;
|
||||
@@ -244,112 +229,11 @@ public class ElectricPumpBlockEntity extends PumpBlockEntity implements IElectri
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public int voltageGeneration() {
|
||||
|
||||
int voltageGeneration = 0;
|
||||
|
||||
for (Direction direction : Direction.values()) {
|
||||
if (hasElectricitySlot(direction)) {
|
||||
|
||||
if (level.getBlockEntity(getBlockPos().relative(direction)) instanceof VoltageAlteringBlockEntity be)
|
||||
if (be.getData().getId() != getData().getId())
|
||||
if (be.getData().getVoltage() != 0)
|
||||
if (be.hasElectricitySlot(direction)) {
|
||||
voltageGeneration = Math.max(voltageGeneration, be.getOutputVoltage());
|
||||
data.getsOutsidePower = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (voltageGeneration == 0)
|
||||
data.getsOutsidePower = false;
|
||||
|
||||
return voltageGeneration;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int powerGeneration() {
|
||||
|
||||
int powerGeneration = 0;
|
||||
|
||||
for (Direction direction : Direction.values()) {
|
||||
if (hasElectricitySlot(direction)) {
|
||||
|
||||
if (level.getBlockEntity(getBlockPos().relative(direction)) instanceof VoltageAlteringBlockEntity be) {
|
||||
if (be.getData().getId() != getData().getId())
|
||||
if (be.getData().getVoltage() != 0)
|
||||
if (be.hasElectricitySlot(direction)) {
|
||||
powerGeneration = Math.max(powerGeneration, be.getPowerUsage()) + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return powerGeneration;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int frequencyGeneration() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateNextTick() {
|
||||
data.updateNextTick = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateNetwork() {
|
||||
getOrCreateElectricNetwork().updateNetwork();
|
||||
if (level instanceof ServerLevel serverLevel)
|
||||
CatnipServices.NETWORK.sendToClientsTrackingChunk(serverLevel, new ChunkPos(worldPosition),new NetworkUpdatePacket(BlockPos.of(getPos())));
|
||||
sendData();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendStuff() {
|
||||
sendData();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setVoltage(int newVoltage) {
|
||||
|
||||
|
||||
if (canBeInGroups()) {
|
||||
data.voltage = (int) (((float) resistance() / data.group.resistance) * (float) data.voltageSupply);
|
||||
return;
|
||||
}
|
||||
data.voltage = newVoltage;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setFrequency(int newFrequency) {
|
||||
data.frequency = newFrequency;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setNetworkResistance(int newUsage) {
|
||||
data.networkResistance = newUsage;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getNetworkResistance() {
|
||||
return data.networkResistance;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public void setNetwork(long network) {
|
||||
this.data.electricalNetworkId = network;
|
||||
if (network != getPos())
|
||||
ElectricNetworkManager.networks.get(getLevel())
|
||||
.remove(getPos());
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public long getPos() {
|
||||
@@ -359,40 +243,13 @@ public class ElectricPumpBlockEntity extends PumpBlockEntity implements IElectri
|
||||
@Override
|
||||
public void remove() {
|
||||
super.remove();
|
||||
this.data.destroyed = true;
|
||||
for (Direction d : Direction.values()) {
|
||||
if (hasElectricitySlot(d))
|
||||
if (getLevelAccessor().getBlockEntity(BlockPos.of(getPos()).relative(d)) instanceof IElectric be && be.hasElectricitySlot(d.getOpposite())) {
|
||||
ElectricNetworkManager.networks.get(getLevel())
|
||||
.remove(be.getPos());
|
||||
be.setNetwork(be.getPos());
|
||||
be.onPlaced();
|
||||
be.updateNextTick();
|
||||
}
|
||||
}
|
||||
if (data.electricalNetworkId != getPos())
|
||||
getOrCreateElectricNetwork().getMembers().remove(this);
|
||||
|
||||
if (data.electricalNetworkId == getPos())
|
||||
ElectricNetworkManager.networks.get(getLevel())
|
||||
.remove(getData().getId());
|
||||
onRemoved();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tick() {
|
||||
super.tick();
|
||||
if (data.connectNextTick) {
|
||||
onPlaced();
|
||||
data.connectNextTick = false;
|
||||
}
|
||||
if (data.updateNextTick) {
|
||||
updateNetwork();
|
||||
data.updateNextTick = false;
|
||||
}
|
||||
if (data.setVoltageNextTick) {
|
||||
setVoltage(data.voltageSupply);
|
||||
data.setVoltageNextTick = false;
|
||||
}
|
||||
tickElectricity();
|
||||
|
||||
}
|
||||
|
||||
@@ -400,17 +257,13 @@ public class ElectricPumpBlockEntity extends PumpBlockEntity implements IElectri
|
||||
protected void write(CompoundTag compound, HolderLookup.Provider registries, boolean clientPacket) {
|
||||
super.write(compound,registries , clientPacket);
|
||||
|
||||
compound.putInt("GroupId", data.group.id);
|
||||
compound.putFloat("GroupResistance", data.group.resistance);
|
||||
writeElectricity(compound,clientPacket);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void read(CompoundTag compound, HolderLookup.Provider registries, boolean clientPacket) {
|
||||
super.read(compound,registries , clientPacket);
|
||||
data.group = new ElectricalGroup(compound.getInt("GroupId"));
|
||||
data.group.resistance = compound.getFloat("GroupResistance");
|
||||
if (!clientPacket)
|
||||
data.connectNextTick = true;
|
||||
readElectricity(compound,clientPacket);
|
||||
}
|
||||
|
||||
/// ////////////////
|
||||
|
||||
Reference in New Issue
Block a user