Search in sources :

Example 6 with JsonBlockPattern

use of com.lowdragmc.multiblocked.api.pattern.JsonBlockPattern in project Multiblocked by Low-Drag-MC.

the class ControllerBuilderWidget method updateList.

protected void updateList() {
    int size = files.size();
    files.forEach(containers::waitToRemoved);
    files.clear();
    File path = new File(Multiblocked.location, "definition/controller");
    if (!path.isDirectory()) {
        if (!path.mkdirs()) {
            return;
        }
    }
    for (File file : Optional.ofNullable(path.listFiles((s, name) -> name.endsWith(".json"))).orElse(new File[0])) {
        SelectableWidgetGroup widgetGroup = (SelectableWidgetGroup) new SelectableWidgetGroup(0, (containers.widgets.size() - size) * 22, containers.getSize().width, 20).setSelectedTexture(-2, 0xff00aa00).setOnSelected(W -> {
            templateButton.setVisible(false);
            selected = null;
            onJsonSelected(file);
        }).addWidget(new ImageWidget(0, 0, 150, 20, new ColorRectTexture(0x4faaaaaa))).addWidget(new ButtonWidget(134, 4, 12, 12, new ResourceTexture("multiblocked:textures/gui/option.png"), cd -> {
            JsonElement jsonElement = FileUtility.loadJson(file);
            if (jsonElement != null) {
                try {
                    String recipeMap = jsonElement.getAsJsonObject().get("recipeMap").getAsString();
                    JsonBlockPattern pattern = Multiblocked.GSON.fromJson(jsonElement.getAsJsonObject().get("basePattern"), JsonBlockPattern.class);
                    ControllerDefinition definition = Multiblocked.GSON.fromJson(jsonElement, ControllerDefinition.class);
                    new ControllerWidget(this, definition, pattern, recipeMap, jsonObject -> {
                        if (jsonObject != null) {
                            FileUtility.saveJson(file, jsonObject);
                        }
                    });
                } catch (Exception ignored) {
                }
            }
        }).setHoverBorderTexture(1, -1).setHoverTooltips("multiblocked.gui.tips.settings")).addWidget(new ImageWidget(32, 0, 100, 20, new TextTexture(file.getName().replace(".json", "")).setWidth(100).setType(TextTexture.TextType.ROLL))).addWidget(new ImageWidget(4, 2, 18, 18, new ItemStackTexture(Items.PAPER)));
        files.add(widgetGroup);
        containers.addWidget(widgetGroup);
    }
}
Also used : Arrays(java.util.Arrays) PredicateComponent(com.lowdragmc.multiblocked.api.pattern.predicates.PredicateComponent) OnlyIn(net.minecraftforge.api.distmarker.OnlyIn) ImageWidget(com.lowdragmc.lowdraglib.gui.widget.ImageWidget) AtomicDouble(com.google.common.util.concurrent.AtomicDouble) JsonBlockPattern(com.lowdragmc.multiblocked.api.pattern.JsonBlockPattern) Direction(net.minecraft.util.Direction) ItemBlueprint(com.lowdragmc.multiblocked.api.item.ItemBlueprint) BlueprintTableTileEntity(com.lowdragmc.multiblocked.api.tile.BlueprintTableTileEntity) Dist(net.minecraftforge.api.distmarker.Dist) ArrayList(java.util.ArrayList) JsonElement(com.google.gson.JsonElement) ClickData(com.lowdragmc.lowdraglib.gui.util.ClickData) MBDBlockStateRenderer(com.lowdragmc.multiblocked.client.renderer.impl.MBDBlockStateRenderer) I18n(net.minecraft.client.resources.I18n) HashSet(java.util.HashSet) ItemStack(net.minecraft.item.ItemStack) BlockInfo(com.lowdragmc.lowdraglib.utils.BlockInfo) Minecraft(net.minecraft.client.Minecraft) Map(java.util.Map) DummyComponentTileEntity(com.lowdragmc.multiblocked.api.tile.DummyComponentTileEntity) TextTexture(com.lowdragmc.lowdraglib.gui.texture.TextTexture) SelectableWidgetGroup(com.lowdragmc.lowdraglib.gui.widget.SelectableWidgetGroup) Desktop(java.awt.Desktop) MbdComponents(com.lowdragmc.multiblocked.api.registry.MbdComponents) Int2ObjectOpenHashMap(it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap) ItemStackTexture(com.lowdragmc.lowdraglib.gui.texture.ItemStackTexture) TrackedDummyWorld(com.lowdragmc.lowdraglib.utils.TrackedDummyWorld) World(net.minecraft.world.World) Set(java.util.Set) BlockPos(net.minecraft.util.math.BlockPos) Items(net.minecraft.item.Items) ButtonWidget(com.lowdragmc.lowdraglib.gui.widget.ButtonWidget) ControllerWidget(com.lowdragmc.multiblocked.api.gui.blueprint_table.components.ControllerWidget) File(java.io.File) List(java.util.List) ColorRectTexture(com.lowdragmc.lowdraglib.gui.texture.ColorRectTexture) ControllerDefinition(com.lowdragmc.multiblocked.api.definition.ControllerDefinition) ResourceTexture(com.lowdragmc.lowdraglib.gui.texture.ResourceTexture) CapabilityItemHandler(net.minecraftforge.items.CapabilityItemHandler) ResourceLocation(net.minecraft.util.ResourceLocation) SimplePredicate(com.lowdragmc.multiblocked.api.pattern.predicates.SimplePredicate) Optional(java.util.Optional) FileUtility(com.lowdragmc.lowdraglib.utils.FileUtility) TileEntity(net.minecraft.tileentity.TileEntity) Multiblocked(com.lowdragmc.multiblocked.Multiblocked) PacketBuffer(net.minecraft.network.PacketBuffer) ItemStackTexture(com.lowdragmc.lowdraglib.gui.texture.ItemStackTexture) ResourceTexture(com.lowdragmc.lowdraglib.gui.texture.ResourceTexture) ControllerWidget(com.lowdragmc.multiblocked.api.gui.blueprint_table.components.ControllerWidget) SelectableWidgetGroup(com.lowdragmc.lowdraglib.gui.widget.SelectableWidgetGroup) ColorRectTexture(com.lowdragmc.lowdraglib.gui.texture.ColorRectTexture) ItemBlueprint(com.lowdragmc.multiblocked.api.item.ItemBlueprint) ButtonWidget(com.lowdragmc.lowdraglib.gui.widget.ButtonWidget) JsonBlockPattern(com.lowdragmc.multiblocked.api.pattern.JsonBlockPattern) ControllerDefinition(com.lowdragmc.multiblocked.api.definition.ControllerDefinition) JsonElement(com.google.gson.JsonElement) TextTexture(com.lowdragmc.lowdraglib.gui.texture.TextTexture) ImageWidget(com.lowdragmc.lowdraglib.gui.widget.ImageWidget) File(java.io.File)

Example 7 with JsonBlockPattern

use of com.lowdragmc.multiblocked.api.pattern.JsonBlockPattern in project Multiblocked by Low-Drag-MC.

the class TemplateBuilderWidget method onBuildTemplate.

protected void onBuildTemplate(ClickData clickData) {
    if (isRemote() && ItemBlueprint.isItemBlueprint(selected)) {
        JsonBlockPattern pattern = null;
        if (ItemBlueprint.isRaw(selected)) {
            BlockPos[] poses = ItemBlueprint.getPos(selected);
            World world = table.getLevel();
            if (poses != null && world.hasChunksAt(poses[0], poses[1])) {
                ControllerTileEntity controller = null;
                for (int x = poses[0].getX(); x <= poses[1].getX(); x++) {
                    for (int y = poses[0].getY(); y <= poses[1].getY(); y++) {
                        for (int z = poses[0].getZ(); z <= poses[1].getZ(); z++) {
                            TileEntity te = world.getBlockEntity(new BlockPos(x, y, z));
                            if (te instanceof ControllerTileEntity) {
                                controller = (ControllerTileEntity) te;
                            }
                        }
                    }
                }
                if (controller != null) {
                    pattern = new JsonBlockPattern(table.getLevel(), controller.getLocation(), controller.getBlockPos(), controller.getFrontFacing(), poses[0].getX(), poses[0].getY(), poses[0].getZ(), poses[1].getX(), poses[1].getY(), poses[1].getZ());
                } else {
                // TODO tips dialog
                }
            } else {
            // TODO tips dialog
            }
        } else if (selected.getTagElement("pattern") != null) {
            String json = selected.getTagElement("pattern").getString("json");
            pattern = Multiblocked.GSON.fromJson(json, JsonBlockPattern.class);
        }
        if (pattern != null) {
            new JsonBlockPatternWidget(this, pattern, patternResult -> {
                if (patternResult != null) {
                    if (ItemBlueprint.setPattern(selected) && patternResult.predicates.get("controller") instanceof PredicateComponent) {
                        patternResult.cleanUp();
                        String json = patternResult.toJson();
                        String controller = ((PredicateComponent) patternResult.predicates.get("controller")).location.toString();
                        selected.getOrCreateTagElement("pattern").putString("json", json);
                        selected.getOrCreateTagElement("pattern").putString("controller", controller);
                        writeClientAction(-1, buffer -> {
                            buffer.writeVarInt(selectedSlot);
                            buffer.writeUtf(json);
                            buffer.writeUtf(controller);
                        });
                    }
                }
            });
        }
    }
}
Also used : BlueprintTableTileEntity(com.lowdragmc.multiblocked.api.tile.BlueprintTableTileEntity) ControllerTileEntity(com.lowdragmc.multiblocked.api.tile.ControllerTileEntity) DummyComponentTileEntity(com.lowdragmc.multiblocked.api.tile.DummyComponentTileEntity) TileEntity(net.minecraft.tileentity.TileEntity) JsonBlockPattern(com.lowdragmc.multiblocked.api.pattern.JsonBlockPattern) JsonBlockPatternWidget(com.lowdragmc.multiblocked.api.gui.dialogs.JsonBlockPatternWidget) BlockPos(net.minecraft.util.math.BlockPos) PredicateComponent(com.lowdragmc.multiblocked.api.pattern.predicates.PredicateComponent) TrackedDummyWorld(com.lowdragmc.lowdraglib.utils.TrackedDummyWorld) World(net.minecraft.world.World) ItemBlueprint(com.lowdragmc.multiblocked.api.item.ItemBlueprint) ControllerTileEntity(com.lowdragmc.multiblocked.api.tile.ControllerTileEntity)

Aggregations

JsonBlockPattern (com.lowdragmc.multiblocked.api.pattern.JsonBlockPattern)7 TrackedDummyWorld (com.lowdragmc.lowdraglib.utils.TrackedDummyWorld)4 PredicateComponent (com.lowdragmc.multiblocked.api.pattern.predicates.PredicateComponent)4 BlockPos (net.minecraft.util.math.BlockPos)4 World (net.minecraft.world.World)4 JsonElement (com.google.gson.JsonElement)3 ControllerDefinition (com.lowdragmc.multiblocked.api.definition.ControllerDefinition)3 ItemBlueprint (com.lowdragmc.multiblocked.api.item.ItemBlueprint)3 DummyComponentTileEntity (com.lowdragmc.multiblocked.api.tile.DummyComponentTileEntity)3 File (java.io.File)3 TileEntity (net.minecraft.tileentity.TileEntity)3 ControllerWidget (com.lowdragmc.multiblocked.api.gui.blueprint_table.components.ControllerWidget)2 SimplePredicate (com.lowdragmc.multiblocked.api.pattern.predicates.SimplePredicate)2 BlueprintTableTileEntity (com.lowdragmc.multiblocked.api.tile.BlueprintTableTileEntity)2 ControllerTileEntity (com.lowdragmc.multiblocked.api.tile.ControllerTileEntity)2 MBDBlockStateRenderer (com.lowdragmc.multiblocked.client.renderer.impl.MBDBlockStateRenderer)2 HashSet (java.util.HashSet)2 Set (java.util.Set)2 OnlyIn (net.minecraftforge.api.distmarker.OnlyIn)2 AtomicDouble (com.google.common.util.concurrent.AtomicDouble)1