Skip to content

Commit a702aa8

Browse files
committed
today's commit
1 parent 7facd3b commit a702aa8

File tree

6 files changed

+123
-33
lines changed

6 files changed

+123
-33
lines changed

src/main/java/dev/dfonline/codeclient/Utility.java

+23
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import dev.dfonline.codeclient.action.Action;
66
import dev.dfonline.codeclient.action.None;
77
import dev.dfonline.codeclient.action.impl.PlaceTemplates;
8+
import dev.dfonline.codeclient.hypercube.item.BlockTag;
89
import dev.dfonline.codeclient.hypercube.template.Template;
910
import dev.dfonline.codeclient.hypercube.template.TemplateBlock;
1011
import dev.dfonline.codeclient.location.Dev;
@@ -14,6 +15,7 @@
1415
import net.minecraft.item.ItemStack;
1516
import net.minecraft.item.Items;
1617
import net.minecraft.nbt.NbtCompound;
18+
import net.minecraft.nbt.NbtElement;
1719
import net.minecraft.nbt.NbtList;
1820
import net.minecraft.nbt.NbtString;
1921
import net.minecraft.network.packet.c2s.play.CreativeInventoryActionC2SPacket;
@@ -27,6 +29,7 @@
2729
import net.minecraft.util.Identifier;
2830
import net.minecraft.util.math.BlockPos;
2931
import org.apache.commons.lang3.ObjectUtils;
32+
import org.jetbrains.annotations.NotNull;
3033
import org.jetbrains.annotations.Nullable;
3134

3235
import java.io.ByteArrayOutputStream;
@@ -311,4 +314,24 @@ public static boolean isGlitchStick(ItemStack item) {
311314
if(Objects.equals(nbt.getCompound("PublicBukkitValues").getString("hypercube:item_instance"), "")) return false;
312315
return Objects.equals(nbt.getCompound("display").getString("Name"), "{\"italic\":false,\"color\":\"red\",\"text\":\"Glitch Stick\"}");
313316
}
317+
318+
public static HashMap<Integer, String> getBlockTagLines(ItemStack item) {
319+
NbtCompound display = item.getSubNbt("display");
320+
NbtList lore = (NbtList) display.get("Lore");
321+
if(lore == null) throw new NullPointerException("Can't get lore.");
322+
323+
HashMap<Integer, String> options = new HashMap<>();
324+
325+
for (int index = lore.size() - 1; index >= 0; index--) {
326+
NbtElement element = lore.get(index);
327+
Text text = Text.Serializer.fromJson(element.asString());
328+
var data = text.getString();
329+
if(data.isBlank() || data.equals("Default Value:")) {
330+
break;
331+
}
332+
options.put(index, data.replaceAll("» ",""));
333+
}
334+
335+
return options;
336+
}
314337
}

src/main/java/dev/dfonline/codeclient/config/Config.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -397,14 +397,14 @@ public YetAnotherConfigLib getLibConfig() {
397397
.description(OptionDescription.createBuilder()
398398
.text(Text.literal("Use a custom menu for chests, with value text boxes for quick editing."))
399399
.text(Text.of(CustomCodeChest.description))
400+
.text(Text.literal("THIS IS IN BETA!").formatted(Formatting.YELLOW,Formatting.BOLD))
400401
.build())
401402
.binding(
402403
CustomChestMenuType.OFF,
403404
() -> CustomCodeChest,
404405
opt -> CustomCodeChest = opt
405406
)
406407
.controller(nodeOption -> () -> new EnumController<>(nodeOption, CustomChestMenuType.class))
407-
.available(false)
408408
.build())
409409
.option(Option.createBuilder(boolean.class)
410410
.name(Text.literal("Place on Air"))

src/main/java/dev/dfonline/codeclient/dev/InteractionManager.java

+1
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ public static boolean onClickSlot(Slot slot, int button, SlotActionType actionTy
132132
Integer selectedIndex = null;
133133
List<String> options = new ArrayList<>();
134134

135+
// TODO: Utility.getBlockTagLines
135136
for (NbtElement element : lore) {
136137
Text text = Text.Serializer.fromJson(element.asString());
137138
if(text == null) return false;

src/main/java/dev/dfonline/codeclient/dev/menu/customchest/CustomChestField.java

+58-24
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
11
package dev.dfonline.codeclient.dev.menu.customchest;
22

3-
import dev.dfonline.codeclient.CodeClient;
3+
import dev.dfonline.codeclient.Utility;
44
import dev.dfonline.codeclient.hypercube.Target;
55
import dev.dfonline.codeclient.hypercube.item.*;
66
import net.minecraft.client.font.TextRenderer;
77
import net.minecraft.client.gui.DrawContext;
88
import net.minecraft.client.gui.Drawable;
99
import net.minecraft.client.gui.navigation.GuiNavigationPath;
10-
import net.minecraft.client.gui.screen.ButtonTextures;
11-
import net.minecraft.client.gui.screen.GameModeSelectionScreen;
1210
import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder;
1311
import net.minecraft.client.gui.screen.narration.NarrationPart;
1412
import net.minecraft.client.gui.widget.*;
13+
import net.minecraft.item.ItemStack;
1514
import net.minecraft.screen.ScreenHandler;
15+
import net.minecraft.screen.ScreenTexts;
1616
import net.minecraft.text.Style;
1717
import net.minecraft.text.Text;
18-
import net.minecraft.util.Identifier;
18+
import net.minecraft.util.Formatting;
1919
import org.jetbrains.annotations.Nullable;
2020

2121
import java.util.ArrayList;
@@ -25,7 +25,7 @@ public class CustomChestField<ItemType extends VarItem> extends ClickableWidget
2525
private final List<Drawable> widgets;
2626
public ItemType item;
2727

28-
public CustomChestField(TextRenderer textRender, int x, int y, int width, int height, Text message, ItemType item, ScreenHandler handler) {
28+
public CustomChestField(TextRenderer textRender, int x, int y, int width, int height, Text message, ItemStack stack, ItemType item, ScreenHandler handler) {
2929
super(x, y, width, height, message);
3030
this.item = item;
3131
var widgets = new ArrayList<Drawable>();
@@ -37,11 +37,11 @@ public CustomChestField(TextRenderer textRender, int x, int y, int width, int he
3737
scopeWidget.setValue(var.getScope());
3838
widgets.add(scopeWidget);
3939
}
40-
if(item instanceof Parameter parameter) {
41-
textboxWidth = textboxWidth - 18;
42-
43-
widgets.add(new FakeSlot(x+textboxWidth,y,Text.literal("Paramater Data"), handler));
44-
}
40+
// if(item instanceof Parameter parameter) {
41+
// textboxWidth = textboxWidth - 18;
42+
//
43+
// widgets.add(new FakeSlot(x+textboxWidth,y,Text.literal("Paramater Data"), handler));
44+
// }
4545
var text = new TextFieldWidget(textRender,x,y,textboxWidth,height,Text.literal(""));
4646
text.setMaxLength(10000);
4747
text.setText(named.getName());
@@ -92,40 +92,52 @@ public CustomChestField(TextRenderer textRender, int x, int y, int width, int he
9292
}
9393
}
9494
if(item instanceof Potion pot) {
95-
int durationWidth = 30;
96-
int potencyWidth = 30;
95+
int durationWidth = 45;
96+
int potencyWidth = 32;
9797
int textboxWidth = width - durationWidth - potencyWidth;
9898
var text = new TextFieldWidget(textRender,x,y,textboxWidth,height,Text.literal(""));
9999
text.setText(pot.getPotion());
100100
widgets.add(text);
101-
var potency = new NumberFieldWidget(textRender,x+textboxWidth,y,potencyWidth,height,Text.empty()).integer();
101+
var potency = new NumberFieldWidget(textRender,x+textboxWidth,y,potencyWidth,height,Text.empty()).integer().min(-255).max(255);
102102
potency.setNumber(pot.getAmplifier() + 1);
103103
widgets.add(potency);
104104
var duration = new TextFieldWidget(textRender,x+textboxWidth+potencyWidth,y,durationWidth,height,Text.empty());
105-
duration.setText(String.valueOf(pot.getDuration()));
105+
duration.setText(pot.duration().replaceAll(" ticks",""));
106106
widgets.add(duration);
107107
}
108108
if(item instanceof Sound sound) {
109-
int volumeWidth = 20;
110-
int pitchWidth = 20;
109+
int volumeWidth = 30;
110+
int pitchWidth = 30;
111111
int textboxWidth = width - volumeWidth - pitchWidth;
112112
var text = new TextFieldWidget(textRender,x,y,textboxWidth,height,Text.literal(""));
113113
text.setText(sound.getSound());
114114
widgets.add(text);
115-
var volume = new NumberFieldWidget(textRender,x+textboxWidth,y,volumeWidth,height,Text.empty());
115+
var volume = new NumberFieldWidget(textRender,x+textboxWidth,y,volumeWidth,height,Text.empty()).min(0);
116116
volume.setNumber(sound.getVolume());
117117
widgets.add(volume);
118-
var pitch = new NumberFieldWidget(textRender,x+textboxWidth+volumeWidth,y,pitchWidth,height,Text.empty());
118+
var pitch = new NumberFieldWidget(textRender,x+textboxWidth+volumeWidth,y,pitchWidth,height,Text.empty()).min(0).max(2);
119119
pitch.setNumber(sound.getPitch());
120120
widgets.add(pitch);
121121
}
122122
if(item instanceof BlockTag tag) {
123-
int slotSize = 18;
124-
int textboxWidth = width - slotSize;
125-
widgets.add(new CyclingButtonWidget.Builder<>(Text::literal).values("A", "B", "C").build(x,y,textboxWidth,height,Text.empty()));
126-
var varItem = new FakeSlot(x + textboxWidth, y, Text.empty(), handler);
127-
if(tag.getVariable() != null) varItem.item = tag.getVariable().toStack();
128-
widgets.add(varItem);
123+
// int slotSize = 18;
124+
// int textboxWidth = width - slotSize;
125+
// try {
126+
// var lines = Utility.getBlockTagLines(stack).values();
127+
// var builder = new CyclingButtonWidget.Builder<>(Text::literal).values(lines);
128+
// for (var line: lines) {
129+
// if(textRender.getWidth(ScreenTexts.composeGenericOptionText(Text.literal(tag.getTag()),Text.literal(line))) > width - 10) {
130+
// builder.omitKeyText();
131+
// break;
132+
// }
133+
// }
134+
// widgets.add(builder.build(x,y,textboxWidth,height,Text.literal(tag.getTag())));
135+
// }
136+
// catch (Exception ignored) {}
137+
// var varItem = new FakeSlot(x + textboxWidth, y, Text.empty(), handler);
138+
// if(tag.getVariable() != null) varItem.item = tag.getVariable().toStack();
139+
// widgets.add(varItem);
140+
widgets.add(new TextWidget(x,y,width,height,ScreenTexts.composeGenericOptionText(Text.literal(tag.getTag()),Text.literal(tag.getOption())),textRender).alignCenter());
129141
}
130142
this.widgets = widgets;
131143
}
@@ -174,6 +186,28 @@ private void updateItem() {
174186
this.item = (ItemType) loc;
175187
}
176188
}
189+
if(item instanceof Sound sound) {
190+
if(widgets.get(0) instanceof TextFieldWidget text) sound.setSound(text.getText());
191+
if(widgets.get(1) instanceof NumberFieldWidget num) sound.setVolume(num.getNumber());
192+
if(widgets.get(2) instanceof NumberFieldWidget num) sound.setPitch(num.getNumber());
193+
}
194+
if(item instanceof Potion pot) {
195+
if(widgets.get(0) instanceof TextFieldWidget text) pot.setPotion(text.getText());
196+
if(widgets.get(1) instanceof NumberFieldWidget num) pot.setAmplifier(num.getInt() - 1);
197+
if(widgets.get(2) instanceof TextFieldWidget text) {
198+
String value = text.getText();
199+
try {
200+
pot.setDuration(Integer.parseInt(value));
201+
} catch (Exception ignored) {
202+
try {
203+
var values = value.split(":");
204+
pot.setDuration((Integer.parseInt(values[0]) * 60 + Integer.parseInt(values[1])) * 20);
205+
} catch (Exception ignored2) {
206+
pot.setDuration(1000000);
207+
}
208+
}
209+
}
210+
}
177211
}
178212

179213
@Override

src/main/java/dev/dfonline/codeclient/dev/menu/customchest/CustomChestMenu.java

+14-5
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@
22

33
import com.mojang.blaze3d.systems.RenderSystem;
44
import dev.dfonline.codeclient.CodeClient;
5+
import dev.dfonline.codeclient.hypercube.item.BlockTag;
56
import dev.dfonline.codeclient.hypercube.item.VarItem;
67
import dev.dfonline.codeclient.hypercube.item.VarItems;
8+
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
9+
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
710
import net.minecraft.client.gui.DrawContext;
811
import net.minecraft.client.gui.Drawable;
912
import net.minecraft.client.gui.screen.ingame.HandledScreen;
@@ -13,6 +16,7 @@
1316
import net.minecraft.client.gui.widget.Widget;
1417
import net.minecraft.entity.player.PlayerInventory;
1518
import net.minecraft.item.ItemStack;
19+
import net.minecraft.network.packet.c2s.play.ClickSlotC2SPacket;
1620
import net.minecraft.network.packet.c2s.play.CreativeInventoryActionC2SPacket;
1721
import net.minecraft.screen.ScreenHandler;
1822
import net.minecraft.screen.ScreenHandlerListener;
@@ -132,7 +136,7 @@ private void update(int previousScroll) {
132136
// widget.setMaxLength(10_000);
133137
// widget.setText(named.getName());
134138
// widget.setFocused(Objects.equals(i,focused));
135-
var widget = new CustomChestField<>(textRenderer, x, y, Size.WIDGET_WIDTH, 18, Text.of(varItem.id), varItem, this.handler);
139+
var widget = new CustomChestField<>(textRenderer, x, y, Size.WIDGET_WIDTH, 18, Text.of(varItem.id), stack, varItem, this.handler);
136140
widgets.put(i,widget);
137141
varItems.add(varItem);
138142
continue;
@@ -213,10 +217,15 @@ private void updateItem(int scrollRelativeSlot) {
213217
Widget widget = widgets.get(scrollRelativeSlot);
214218
if(widget instanceof CustomChestField<?> field) {
215219
VarItem item = field.item;
216-
super.onMouseClick(slot,slot.id,0,SlotActionType.SWAP);
217-
CodeClient.MC.getNetworkHandler().sendPacket(new CreativeInventoryActionC2SPacket(36, item.toStack()));
218-
super.onMouseClick(slot,slot.id,0,SlotActionType.SWAP);
219-
super.onMouseClick(slot,54,0,SlotActionType.QUICK_CRAFT);
220+
if(item instanceof BlockTag) {
221+
Int2ObjectMap<ItemStack> int2ObjectMap = new Int2ObjectOpenHashMap<>();
222+
CodeClient.MC.getNetworkHandler().sendPacket(new ClickSlotC2SPacket(handler.syncId, handler.nextRevision(), slot.getIndex(), 0, SlotActionType.PICKUP, item.toStack(), int2ObjectMap));
223+
} else {
224+
super.onMouseClick(slot,slot.id,0,SlotActionType.SWAP);
225+
CodeClient.MC.getNetworkHandler().sendPacket(new CreativeInventoryActionC2SPacket(36, item.toStack()));
226+
super.onMouseClick(slot,slot.id,0,SlotActionType.SWAP);
227+
super.onMouseClick(slot,54,0,SlotActionType.QUICK_CRAFT);
228+
}
220229
}
221230
}
222231

src/main/java/dev/dfonline/codeclient/dev/menu/customchest/NumberFieldWidget.java

+26-3
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,16 @@
44
import net.minecraft.client.gui.widget.TextFieldWidget;
55
import net.minecraft.text.Text;
66
import org.intellij.lang.annotations.RegExp;
7+
import org.jetbrains.annotations.Nullable;
78

89
public class NumberFieldWidget extends TextFieldWidget {
910
private double number = 0;
1011
private @RegExp String regex = "(?<!^)-|[^\\d-.]";
1112
private boolean isInt = false;
13+
@Nullable
14+
public Double min = null;
15+
@Nullable
16+
public Double max = null;
1217

1318
public NumberFieldWidget(TextRenderer textRenderer, int x, int y, int width, int height, Text text) {
1419
super(textRenderer, x, y, width, height, text);
@@ -18,19 +23,37 @@ public NumberFieldWidget integer() {
1823
this.isInt = true;
1924
return this;
2025
}
26+
public NumberFieldWidget min(double min) {
27+
this.min = min;
28+
return this;
29+
}
30+
public NumberFieldWidget max(double max) {
31+
this.max = max;
32+
return this;
33+
}
34+
35+
private void setValue(double number) {
36+
if(min != null) {
37+
number = Math.max(min,number);
38+
}
39+
if(max != null) {
40+
number = Math.min(max,number);
41+
}
42+
this.number = number;
43+
}
2144

2245
@Override
2346
public void setText(String text) {
2447
try {
25-
number = Double.parseDouble(text);
48+
setValue(Double.parseDouble(text));
2649
}
2750
catch (Exception ignored) {}
2851
super.setText(text);
2952
}
3053

3154
public void setNumber(double number) {
32-
this.setText((isInt? "%.0f" : "%.2f").formatted(number));
33-
this.number = number;
55+
setValue(number);
56+
this.setText((isInt? "%.0f" : "%.2f").formatted(this.number));
3457
}
3558

3659
public double getNumber() {

0 commit comments

Comments
 (0)