Skip to content

Commit 6759475

Browse files
committed
more fixed
1 parent 60f1657 commit 6759475

File tree

5 files changed

+117
-33
lines changed

5 files changed

+117
-33
lines changed

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ mapping_version=2023.06.26-1.20.1
1212
mod_id=crazyae2addons
1313
mod_name=Crazy AE2 Addons
1414
mod_license=MIT
15-
mod_version=1.11.1
15+
mod_version=1.11.2
1616
mod_group_id=net.oktawia.crazyae2addons
1717
mod_authors=Oktawia (GilbertzRivi)
1818
mod_description=Some features I wanted to add to Applied Energistics 2

src/main/java/net/oktawia/crazyae2addons/entities/AutoBuilderBE.java

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import net.minecraft.network.chat.Component;
4141
import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket;
4242
import net.minecraft.resources.ResourceLocation;
43+
import net.minecraft.server.MinecraftServer;
4344
import net.minecraft.server.level.ServerLevel;
4445
import net.minecraft.world.MenuProvider;
4546
import net.minecraft.world.entity.player.Inventory;
@@ -55,9 +56,8 @@
5556
import net.minecraft.world.level.block.state.properties.BooleanProperty;
5657
import net.minecraft.world.level.block.state.properties.IntegerProperty;
5758
import net.minecraft.world.level.block.state.properties.Property;
58-
import net.minecraft.world.level.storage.loot.LootContext;
59+
import net.minecraft.world.level.storage.LevelResource;
5960
import net.minecraft.world.level.storage.loot.LootParams;
60-
import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets;
6161
import net.minecraft.world.level.storage.loot.parameters.LootContextParams;
6262
import net.minecraftforge.common.capabilities.Capability;
6363
import net.minecraftforge.common.capabilities.ForgeCapabilities;
@@ -73,6 +73,10 @@
7373
import org.jetbrains.annotations.NotNull;
7474
import org.jetbrains.annotations.Nullable;
7575

76+
import java.io.IOException;
77+
import java.nio.charset.StandardCharsets;
78+
import java.nio.file.Files;
79+
import java.nio.file.Path;
7680
import java.util.*;
7781
import java.util.concurrent.Future;
7882

@@ -91,6 +95,7 @@ public class AutoBuilderBE extends AENetworkInvBlockEntity implements IGridTicka
9195
public List<ICraftingLink> craftingLinks = new ArrayList<>();
9296
private boolean isCrafting = false;
9397
private List<GenericStack> toCraft = new ArrayList<>();
98+
private final boolean DEBUG = false;
9499

95100
public AutoBuilderBE(BlockPos pos, BlockState state) {
96101
super(CrazyBlockEntityRegistrar.AUTO_BUILDER_BE.get(), pos, state);
@@ -401,7 +406,7 @@ public TickRateModulation tickingRequest(IGridNode node, int ticksSinceLastCall)
401406
AEItemKey.of(block.asItem()),
402407
1, IActionSource.ofMachine(this), Actionable.MODULATE);
403408

404-
if (extracted > 0) {
409+
if (extracted > 0 || this.DEBUG) {
405410
BlockState state = block.defaultBlockState();
406411
if (!props.isEmpty()) {
407412
for (Map.Entry<String, String> entry : props.entrySet()) {
@@ -534,6 +539,22 @@ public void scheduleCrafts() {
534539
}
535540
}
536541

542+
public static String loadProgramFromFile(ItemStack stack, MinecraftServer server) {
543+
if (!stack.hasTag() || !stack.getTag().contains("program_id")) return "";
544+
545+
String id = stack.getTag().getString("program_id");
546+
Path file = server.getWorldPath(new LevelResource("serverdata"))
547+
.resolve("autobuilder")
548+
.resolve(id);
549+
550+
try {
551+
return Files.readString(file, StandardCharsets.UTF_8);
552+
} catch (IOException e) {
553+
LogUtils.getLogger().info(e.toString());
554+
return "";
555+
}
556+
}
557+
537558
public void onRedstoneActivate(@Nullable GenericStack additional) {
538559
if (getLevel() == null) return;
539560
if (inventory.getStackInSlot(0).isEmpty() && !inventory.getStackInSlot(1).isEmpty()) {
@@ -544,7 +565,7 @@ public void onRedstoneActivate(@Nullable GenericStack additional) {
544565
var tag = inventory.getStackInSlot(0).getOrCreateTag();
545566
if (tag.contains("code")){
546567
if (tag.getBoolean("code")){
547-
var program = ProgramExpander.expand(tag.getString("program"));
568+
var program = ProgramExpander.expand(loadProgramFromFile(inventory.getStackInSlot(0), getLevel().getServer()));
548569
if (program.success){
549570
code = program.program;
550571
}
@@ -557,9 +578,11 @@ public void onRedstoneActivate(@Nullable GenericStack additional) {
557578
if (this.code.isEmpty()) return;
558579

559580
checkBlocksInStorage(ProgramExpander.countUsedBlocks(String.join("/", this.code)), additional);
560-
if (!this.toCraft.isEmpty() && isUpgradedWith(AEItems.CRAFTING_CARD)){
561-
scheduleCrafts();
562-
isCrafting = true;
581+
if (!this.toCraft.isEmpty() && !this.DEBUG){
582+
if (isUpgradedWith(AEItems.CRAFTING_CARD)){
583+
scheduleCrafts();
584+
isCrafting = true;
585+
}
563586
} else {
564587
this.isCrafting = false;
565588
this.isRunning = true;

src/main/java/net/oktawia/crazyae2addons/items/BuilderPatternItem.java

Lines changed: 34 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,12 @@
88
import appeng.menu.MenuOpener;
99
import appeng.menu.locator.MenuLocators;
1010
import com.google.common.collect.ImmutableMap;
11+
import com.mojang.logging.LogUtils;
1112
import net.minecraft.core.BlockPos;
13+
import net.minecraft.nbt.CompoundTag;
1214
import net.minecraft.network.chat.Component;
1315
import net.minecraft.resources.ResourceLocation;
16+
import net.minecraft.server.MinecraftServer;
1417
import net.minecraft.world.InteractionHand;
1518
import net.minecraft.world.InteractionResult;
1619
import net.minecraft.world.InteractionResultHolder;
@@ -21,15 +24,21 @@
2124
import net.minecraft.world.level.block.Blocks;
2225
import net.minecraft.world.level.block.state.BlockState;
2326
import net.minecraft.world.level.block.state.properties.Property;
27+
import net.minecraft.world.level.storage.LevelResource;
2428
import net.minecraftforge.registries.ForgeRegistries;
2529
import net.oktawia.crazyae2addons.defs.regs.CrazyMenuRegistrar;
2630
import net.oktawia.crazyae2addons.logic.BuilderPatternHost;
2731
import net.oktawia.crazyae2addons.misc.ProgramExpander;
2832
import org.jetbrains.annotations.NotNull;
2933
import org.jetbrains.annotations.Nullable;
3034

35+
import java.io.IOException;
36+
import java.nio.charset.StandardCharsets;
37+
import java.nio.file.Files;
38+
import java.nio.file.Path;
3139
import java.util.LinkedHashMap;
3240
import java.util.Map;
41+
import java.util.UUID;
3342

3443
public class BuilderPatternItem extends AEBaseItem implements IMenuItem {
3544
private BlockPos pos1 = null;
@@ -109,17 +118,19 @@ public BuilderPatternItem(Properties props) {
109118
if (!header.isEmpty()) header.setLength(header.length() - 2);
110119

111120
String finalCode = header + "\n||\n" + pattern;
112-
if (finalCode.length() <= 32767 || true){
113-
stack.getOrCreateTag().putString("program", finalCode);
114-
ProgramExpander.Result result = ProgramExpander.expand(finalCode);
115-
if (result.success) {
116-
stack.getOrCreateTag().putBoolean("code", true);
117-
p.displayClientMessage(Component.literal("Saved pattern to NBT, length: " + finalCode.length()), true);
118-
} else {
119-
p.displayClientMessage(Component.literal("Could not save this structure"), true);
120-
}
121+
122+
ProgramExpander.Result result = ProgramExpander.expand(finalCode);
123+
if (result.success) {
124+
String programId = UUID.randomUUID().toString();
125+
stack.getOrCreateTag().putBoolean("code", true);
126+
stack.getOrCreateTag().putString("program_id", programId);
127+
stack.getOrCreateTag().putInt("delay", 0);
128+
129+
saveProgramToFile(programId, finalCode, p.getServer());
130+
131+
p.displayClientMessage(Component.literal("Saved pattern to file, length: " + finalCode.length()), true);
121132
} else {
122-
p.displayClientMessage(Component.literal("Structure to big"), true);
133+
p.displayClientMessage(Component.literal("Could not save this structure"), true);
123134
}
124135

125136
pos1 = null;
@@ -131,6 +142,19 @@ public BuilderPatternItem(Properties props) {
131142
InteractionResult.sidedSuccess(level.isClientSide()), p.getItemInHand(hand));
132143
}
133144

145+
public static void saveProgramToFile(String id, String code, MinecraftServer server) {
146+
Path file = server.getWorldPath(new LevelResource("serverdata"))
147+
.resolve("autobuilder")
148+
.resolve(id);
149+
150+
try {
151+
Files.createDirectories(file.getParent());
152+
Files.writeString(file, code, StandardCharsets.UTF_8);
153+
} catch (IOException e) {
154+
LogUtils.getLogger().info(e.toString());
155+
}
156+
}
157+
134158
private String moveCursor(BlockPos from, BlockPos to) {
135159
StringBuilder moves = new StringBuilder();
136160
int dx = to.getX() - from.getX();
Lines changed: 47 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,25 @@
11
package net.oktawia.crazyae2addons.logic;
22

33
import appeng.api.implementations.menuobjects.ItemMenuHost;
4+
import com.mojang.logging.LogUtils;
45
import net.minecraft.nbt.CompoundTag;
6+
import net.minecraft.server.MinecraftServer;
57
import net.minecraft.world.entity.player.Player;
68
import net.minecraft.world.item.ItemStack;
9+
import net.minecraft.world.level.storage.LevelResource;
710
import net.oktawia.crazyae2addons.menus.CrazyEmitterMultiplierMenu;
811
import net.oktawia.crazyae2addons.misc.ProgramExpander;
912
import org.jetbrains.annotations.NotNull;
1013
import org.jetbrains.annotations.Nullable;
1114

15+
import java.io.IOException;
16+
import java.nio.charset.StandardCharsets;
17+
import java.nio.file.Files;
18+
import java.nio.file.Path;
1219
import java.util.ArrayList;
1320
import java.util.Arrays;
1421
import java.util.List;
22+
import java.util.UUID;
1523

1624
public class BuilderPatternHost extends ItemMenuHost {
1725

@@ -22,9 +30,6 @@ public class BuilderPatternHost extends ItemMenuHost {
2230
public BuilderPatternHost(Player player, @Nullable Integer slot, ItemStack itemStack) {
2331
super(player, slot, itemStack);
2432
var tag = getItemStack().getOrCreateTag();
25-
if (tag.contains("program")){
26-
this.program = tag.getString("program");
27-
}
2833
if (tag.contains("code")){
2934
this.code = tag.getBoolean("code");
3035
}
@@ -34,25 +39,57 @@ public BuilderPatternHost(Player player, @Nullable Integer slot, ItemStack itemS
3439
}
3540

3641
public String getProgram() {
37-
return this.program;
42+
return loadProgramFromFile(this.getItemStack(), getPlayer().getServer());
3843
}
44+
3945
public int getDelay() {
4046
return this.delay;
4147
}
4248
public void setProgram(String program) {
4349
this.program = program;
44-
this.getItemStack().getOrCreateTag().putString("program", program);
50+
ProgramExpander.Result result = ProgramExpander.expand(program);
51+
this.code = result.success;
52+
this.getItemStack().getOrCreateTag().putBoolean("code", this.code);
53+
54+
saveProgramToFile(
55+
getItemStack().getOrCreateTag().contains("program_id")
56+
? this.getItemStack().getOrCreateTag().getString("program_id")
57+
: UUID.randomUUID().toString(),
58+
program,
59+
getPlayer().getServer()
60+
);
4561
}
4662
public void setDelay(int delay) {
4763
this.delay = delay;
4864
this.getItemStack().getOrCreateTag().putInt("delay", delay);
4965
}
5066

51-
public void validate() {
52-
if (!program.isEmpty()){
53-
ProgramExpander.Result result = ProgramExpander.expand(program);
54-
this.code = result.success;
55-
this.getItemStack().getOrCreateTag().putBoolean("code", this.code);
67+
public static String loadProgramFromFile(ItemStack stack, MinecraftServer server) {
68+
if (!stack.hasTag() || !stack.getTag().contains("program_id")) return "";
69+
70+
String id = stack.getTag().getString("program_id");
71+
Path file = server.getWorldPath(new LevelResource("serverdata"))
72+
.resolve("autobuilder")
73+
.resolve(id);
74+
75+
try {
76+
return Files.readString(file, StandardCharsets.UTF_8);
77+
} catch (IOException e) {
78+
LogUtils.getLogger().info(e.toString());
79+
return "";
80+
}
81+
}
82+
83+
public static void saveProgramToFile(String id, String code, MinecraftServer server) {
84+
Path file = server.getWorldPath(new LevelResource("serverdata"))
85+
.resolve("autobuilder")
86+
.resolve(id);
87+
88+
try {
89+
Files.createDirectories(file.getParent());
90+
Files.writeString(file, code, StandardCharsets.UTF_8);
91+
} catch (IOException e) {
92+
LogUtils.getLogger().info(e.toString());
5693
}
5794
}
5895
}

src/main/java/net/oktawia/crazyae2addons/menus/BuilderPatternMenu.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,11 @@ public BuilderPatternMenu(int id, Inventory playerInventory, BuilderPatternHost
3232
registerClientAction(SEND_DELAY, Integer.class, this::updateDelay);
3333
registerClientAction(REQUEST_DATA, this::requestData);
3434
this.host = host;
35-
this.program = host.getProgram();
3635
this.delay = host.getDelay();
3736
this.createPlayerInventorySlots(playerInventory);
37+
if (!isClientSide()){
38+
this.program = host.getProgram();
39+
}
3840
}
3941

4042
public void requestData(){
@@ -61,22 +63,20 @@ public void requestData(){
6163

6264
public void updateData(String program) {
6365
this.program = program;
64-
this.host.setProgram(program);
6566
if (isClientSide()){
6667
NetworkHandler.INSTANCE.sendToServer(new SendLongStringToServerPacket(this.program));
6768
} else {
68-
this.host.validate();
69+
this.host.setProgram(program);
6970
}
7071
}
7172

7273
public void updateDelay(Integer delay) {
7374
if (delay < 0) delay = 0;
7475
this.delay = delay;
75-
this.host.setDelay(delay);
7676
if (isClientSide()){
7777
sendClientAction(SEND_DELAY, delay);
7878
} else {
79-
this.host.validate();
79+
this.host.setDelay(delay);
8080
}
8181
}
8282
}

0 commit comments

Comments
 (0)