From 006c3f95f0d217aec4ec2c862f37e8b613ed7b1e Mon Sep 17 00:00:00 2001 From: TwistedGate <31029668+TwistedGate@users.noreply.github.com> Date: Mon, 22 Aug 2022 13:23:41 +0200 Subject: [PATCH 01/26] Rough and broken, barebones implementation --- build.gradle | 5 +- .../common/data/OEBlockStates.java | 122 +++ .../common/data/OEDataGenerator.java | 3 +- .../common/data/OEItemModels.java | 54 ++ .../overengineered/common/data/OERecipes.java | 55 ++ src/generated/resources/.cache/cache | 13 + .../overengineered/blockstates/busbar.json | 290 +++++++ .../models/block/busbar_bend.json | 9 + .../models/block/busbar_horizontal_down.json | 9 + .../models/block/busbar_horizontal_up.json | 9 + .../models/block/busbar_with_insulators.json | 9 + .../busbar_with_insulators_pre_y_rotated.json | 9 + .../block/busbar_without_insulators.json | 9 + ...sbar_without_insulators_pre_y_rotated.json | 9 + .../overengineered/models/item/busbar.json | 53 ++ .../recipes/overengineered/busbar.json | 60 ++ .../recipes/overengineered/busbar2.json | 60 ++ .../data/overengineered/recipes/busbar.json | 26 + .../data/overengineered/recipes/busbar2.json | 26 + .../overengineered/OverEngineered.java | 13 +- .../client/BlockRenderLayers.java | 27 + .../overengineered/common/OEContent.java | 6 + .../overengineered/common/OERegisters.java | 8 +- .../overengineered/common/OETileTypes.java | 12 + .../common/blocks/busbar/BusbarBlock.java | 181 +++++ .../common/blocks/busbar/BusbarState.java | 497 ++++++++++++ .../blocks/tileentity/BusbarTileEntity.java | 30 + .../blocks/tileentity/OETileEntityBase.java | 64 ++ .../utils/ExternalModContent.java | 39 + .../utils/enums/EnumBusbarShape.java | 299 ++++++++ .../assets/overengineered/lang/en_us.json | 3 + .../models/block/obj/busbar/busbar_a.obj | 351 +++++++++ .../models/block/obj/busbar/busbar_a_alt.obj | 351 +++++++++ .../models/block/obj/busbar/busbar_b.obj | 120 +++ .../models/block/obj/busbar/busbar_b_alt.obj | 120 +++ .../models/block/obj/busbar/busbar_bend.obj | 472 ++++++++++++ .../block/obj/busbar/busbar_edge_inside.obj | 705 ++++++++++++++++++ .../block/obj/busbar/busbar_edge_outside.obj | 207 +++++ .../block/obj/busbar/busconnector_lv_a.obj | 60 ++ .../block/obj/busbar/busconnector_lv_b.obj | 60 ++ .../block/obj/busbar/busconnector_lv_c.obj | 82 ++ .../block/obj/busbar/busconnector_mv_a.obj | 84 +++ .../block/obj/busbar/busconnector_mv_b.obj | 84 +++ .../block/obj/busbar/busconnector_mv_c.obj | 106 +++ .../models/block/obj/busbar/busmaterial.mtl | 2 + .../textures/block/obj/busbar.png | Bin 0 -> 266 bytes 46 files changed, 4805 insertions(+), 8 deletions(-) create mode 100644 src/datagen/java/twistedgate/overengineered/common/data/OEBlockStates.java create mode 100644 src/datagen/java/twistedgate/overengineered/common/data/OEItemModels.java create mode 100644 src/generated/resources/.cache/cache create mode 100644 src/generated/resources/assets/overengineered/blockstates/busbar.json create mode 100644 src/generated/resources/assets/overengineered/models/block/busbar_bend.json create mode 100644 src/generated/resources/assets/overengineered/models/block/busbar_horizontal_down.json create mode 100644 src/generated/resources/assets/overengineered/models/block/busbar_horizontal_up.json create mode 100644 src/generated/resources/assets/overengineered/models/block/busbar_with_insulators.json create mode 100644 src/generated/resources/assets/overengineered/models/block/busbar_with_insulators_pre_y_rotated.json create mode 100644 src/generated/resources/assets/overengineered/models/block/busbar_without_insulators.json create mode 100644 src/generated/resources/assets/overengineered/models/block/busbar_without_insulators_pre_y_rotated.json create mode 100644 src/generated/resources/assets/overengineered/models/item/busbar.json create mode 100644 src/generated/resources/data/overengineered/advancements/recipes/overengineered/busbar.json create mode 100644 src/generated/resources/data/overengineered/advancements/recipes/overengineered/busbar2.json create mode 100644 src/generated/resources/data/overengineered/recipes/busbar.json create mode 100644 src/generated/resources/data/overengineered/recipes/busbar2.json create mode 100644 src/main/java/twistedgate/overengineered/client/BlockRenderLayers.java create mode 100644 src/main/java/twistedgate/overengineered/common/OETileTypes.java create mode 100644 src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java create mode 100644 src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarState.java create mode 100644 src/main/java/twistedgate/overengineered/common/blocks/tileentity/BusbarTileEntity.java create mode 100644 src/main/java/twistedgate/overengineered/common/blocks/tileentity/OETileEntityBase.java create mode 100644 src/main/java/twistedgate/overengineered/utils/ExternalModContent.java create mode 100644 src/main/java/twistedgate/overengineered/utils/enums/EnumBusbarShape.java create mode 100644 src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_a.obj create mode 100644 src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_a_alt.obj create mode 100644 src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_b.obj create mode 100644 src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_b_alt.obj create mode 100644 src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_bend.obj create mode 100644 src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_edge_inside.obj create mode 100644 src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_edge_outside.obj create mode 100644 src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_lv_a.obj create mode 100644 src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_lv_b.obj create mode 100644 src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_lv_c.obj create mode 100644 src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_mv_a.obj create mode 100644 src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_mv_b.obj create mode 100644 src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_mv_c.obj create mode 100644 src/main/resources/assets/overengineered/models/block/obj/busbar/busmaterial.mtl create mode 100644 src/main/resources/assets/overengineered/textures/block/obj/busbar.png diff --git a/build.gradle b/build.gradle index 0f9162a..bab4d24 100644 --- a/build.gradle +++ b/build.gradle @@ -106,8 +106,9 @@ minecraft{ data{ workingDirectory project.file('run') - property 'forge.logging.markers', 'REGISTRIES' - property 'forge.logging.console.level', 'debug' + property 'forge.logging.markers', '' + property 'forge.logging.console.level', 'info' + property 'fml.earlyprogresswindow', 'false' property 'mixin.env.remapRefMap', 'true' property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg" diff --git a/src/datagen/java/twistedgate/overengineered/common/data/OEBlockStates.java b/src/datagen/java/twistedgate/overengineered/common/data/OEBlockStates.java new file mode 100644 index 0000000..857887b --- /dev/null +++ b/src/datagen/java/twistedgate/overengineered/common/data/OEBlockStates.java @@ -0,0 +1,122 @@ +package twistedgate.overengineered.common.data; + +import java.util.function.Function; + +import javax.annotation.Nullable; + +import net.minecraft.data.DataGenerator; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.Block; +import net.minecraftforge.client.model.generators.BlockModelBuilder; +import net.minecraftforge.client.model.generators.BlockStateProvider; +import net.minecraftforge.client.model.generators.ConfiguredModel; +import net.minecraftforge.client.model.generators.VariantBlockStateBuilder; +import net.minecraftforge.client.model.generators.VariantBlockStateBuilder.PartialBlockstate; +import net.minecraftforge.client.model.generators.loaders.OBJLoaderBuilder; +import net.minecraftforge.common.data.ExistingFileHelper; +import twistedgate.overengineered.OverEngineered; +import twistedgate.overengineered.common.OEContent; +import twistedgate.overengineered.common.blocks.busbar.BusbarBlock; +import twistedgate.overengineered.utils.enums.EnumBusbarShape; + +public class OEBlockStates extends BlockStateProvider{ + final ExistingFileHelper exFileHelper; + public OEBlockStates(DataGenerator gen, ExistingFileHelper exFileHelper){ + super(gen, OverEngineered.MODID, exFileHelper); + this.exFileHelper = exFileHelper; + } + + @Override + protected void registerStatesAndModels(){ + busbar(); + } + + private void busbar(){ + // Insulators + BlockModelBuilder model_insulators_normal = busModel("models/block/obj/busbar/busbar_a.obj", "_with_insulators"); + BlockModelBuilder model_insulators_rotated = busModel("models/block/obj/busbar/busbar_a_alt.obj", "_with_insulators_pre_y_rotated"); + + // Floating + BlockModelBuilder model_floating_normal = busModel("models/block/obj/busbar/busbar_b.obj", "_without_insulators"); + BlockModelBuilder model_floating_rotated = busModel("models/block/obj/busbar/busbar_b_alt.obj", "_without_insulators_pre_y_rotated"); + + BlockModelBuilder model_bend = busModel("models/block/obj/busbar/busbar_bend.obj", "_bend"); + BlockModelBuilder model_edge_inside = busModel("models/block/obj/busbar/busbar_edge_inside.obj", "_horizontal_up"); + BlockModelBuilder model_edge_outside = busModel("models/block/obj/busbar/busbar_edge_outside.obj", "_horizontal_down"); + + model_insulators_normal.assertExistence(); + model_insulators_rotated.assertExistence(); + + model_floating_normal.assertExistence(); + model_floating_rotated.assertExistence(); + + model_bend.assertExistence(); + model_edge_inside.assertExistence(); + model_edge_outside.assertExistence(); + + bus(EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH, model_insulators_normal, 0, 0); + bus(EnumBusbarShape.INSULATORS_DOWN_EAST_WEST, model_insulators_normal, 0, 90); + bus(EnumBusbarShape.INSULATORS_UP_NORTH_SOUTH, model_insulators_normal, 180, 0); + bus(EnumBusbarShape.INSULATORS_UP_EAST_WEST, model_insulators_normal, 180, 90); + + bus(EnumBusbarShape.FLOATING_DOWN_NORTH_SOUTH, model_floating_normal, 0, 0); + bus(EnumBusbarShape.FLOATING_DOWN_EAST_WEST, model_floating_normal, 0, 90); + bus(EnumBusbarShape.FLOATING_UP_NORTH_SOUTH, model_floating_normal, 180, 0); + bus(EnumBusbarShape.FLOATING_UP_EAST_WEST, model_floating_normal, 180, 90); + + EnumBusbarShape.Type.STRAIGHT_INSULATORS_WALL_NORMAL.forEachIndexed((i, shape) -> bus(shape, model_insulators_normal, -90, 90 * i)); + EnumBusbarShape.Type.STRAIGHT_INSULATORS_WALL_ROTATED.forEachIndexed((i, shape) -> bus(shape, model_insulators_rotated, -90, 90 * i)); + + EnumBusbarShape.Type.STRAIGHT_FLOATING_WALL_NORMAL.forEachIndexed((i, shape) -> bus(shape, model_floating_normal, -90, 90 * i)); + EnumBusbarShape.Type.STRAIGHT_FLOATING_WALL_ROTATED.forEachIndexed((i, shape) -> bus(shape, model_floating_rotated, -90, 90 * i)); + + EnumBusbarShape.Type.BENDS_FLOOR.forEachIndexed((i, shape) -> bus(shape, model_bend, 0, 90 + 90 * i)); + EnumBusbarShape.Type.BENDS_CEILING.forEachIndexed((i, shape) -> bus(shape, model_bend, 180, 180 + 90 * i)); + EnumBusbarShape.Type.BENDS_WALLS.forEachIndexed((i, shape) -> bus(shape, model_bend, -90, 90 * i)); + + EnumBusbarShape.Type.EDGE_INSIDE_FLOOR.forEachIndexed((i, shape) -> bus(shape, model_edge_inside, 0, 90 * i)); + EnumBusbarShape.Type.EDGE_INSIDE_CEILING.forEachIndexed((i, shape) -> bus(shape, model_edge_inside, 180, 90 * i)); + EnumBusbarShape.Type.EDGE_OUTSIDE_FLOOR.forEachIndexed((i, shape) -> bus(shape, model_edge_outside, 0, 90 * i)); + EnumBusbarShape.Type.EDGE_OUTSIDE_CEILING.forEachIndexed((i, shape) -> bus(shape, model_edge_outside, 180, 90 * i)); + } + + private PartialBlockstate bus(EnumBusbarShape shape, BlockModelBuilder model, int x_rot, int y_rot){ + VariantBlockStateBuilder builder = getVariantBuilder(OEContent.Blocks.BUSBAR.get()); + PartialBlockstate state = builder.partialState(); + + return state.with(BusbarBlock.SHAPE, shape) + .addModels(new ConfiguredModel(model, x_rot % 360, y_rot % 360, false)); + } + + // Could still be used for specific stuff + @SuppressWarnings("unused") + private PartialBlockstate bus(Function f, BlockModelBuilder model, int x_rot, int y_rot){ + VariantBlockStateBuilder builder = getVariantBuilder(OEContent.Blocks.BUSBAR.get()); + return f.apply(builder.partialState()).addModels(new ConfiguredModel(model, x_rot, y_rot, false)); + } + + @SuppressWarnings("unused") + @Deprecated(forRemoval = true) + private PartialBlockstate bus(PartialBlockstate state, BlockModelBuilder m0, BlockModelBuilder m1, boolean floating, int x_rot, int y_rot){ + return state.addModels(new ConfiguredModel(floating ? m1 : m0, x_rot, y_rot, false)); + } + + private BlockModelBuilder busModel(String modelPath, @Nullable String postFix){ + return objModel(OEContent.Blocks.BUSBAR.get(), modelPath, postFix, modLoc("block/obj/busbar")); + } + + private BlockModelBuilder objModel(Block b, String modelPath, @Nullable String postFix, ResourceLocation texture){ + if(postFix == null) + postFix = ""; + + BlockModelBuilder model = this.models().getBuilder(getPath(b) + postFix) + .customLoader(OBJLoaderBuilder::begin).modelLocation(modLoc(modelPath)).flipV(true).end() + .texture("texture", texture) + .texture("particle", texture); + return model; + } + + private String getPath(Block b){ + return b.getRegistryName().getPath(); + } +} diff --git a/src/datagen/java/twistedgate/overengineered/common/data/OEDataGenerator.java b/src/datagen/java/twistedgate/overengineered/common/data/OEDataGenerator.java index 851cabd..e9ab811 100644 --- a/src/datagen/java/twistedgate/overengineered/common/data/OEDataGenerator.java +++ b/src/datagen/java/twistedgate/overengineered/common/data/OEDataGenerator.java @@ -28,7 +28,8 @@ public static void generate(GatherDataEvent event){ } if(event.includeClient()){ - + generator.addProvider(new OEBlockStates(generator, exhelper)); + generator.addProvider(new OEItemModels(generator, exhelper)); } } diff --git a/src/datagen/java/twistedgate/overengineered/common/data/OEItemModels.java b/src/datagen/java/twistedgate/overengineered/common/data/OEItemModels.java new file mode 100644 index 0000000..1334449 --- /dev/null +++ b/src/datagen/java/twistedgate/overengineered/common/data/OEItemModels.java @@ -0,0 +1,54 @@ +package twistedgate.overengineered.common.data; + +import javax.annotation.Nullable; + +import com.mojang.math.Vector3f; + +import net.minecraft.client.renderer.block.model.ItemTransforms.TransformType; +import net.minecraft.data.DataGenerator; +import net.minecraft.world.level.ItemLike; +import net.minecraftforge.client.model.generators.ItemModelBuilder; +import net.minecraftforge.client.model.generators.ItemModelProvider; +import net.minecraftforge.client.model.generators.ModelBuilder; +import net.minecraftforge.client.model.generators.loaders.OBJLoaderBuilder; +import net.minecraftforge.common.data.ExistingFileHelper; +import twistedgate.overengineered.OverEngineered; +import twistedgate.overengineered.common.OEContent; + +public class OEItemModels extends ItemModelProvider{ + public OEItemModels(DataGenerator generator, ExistingFileHelper existingFileHelper){ + super(generator, OverEngineered.MODID, existingFileHelper); + } + + @Override + protected void registerModels(){ + ItemModelBuilder model = obj(OEContent.Blocks.BUSBAR.get(), "block/obj/busbar/busbar_a.obj") + .texture("texture", modLoc("block/obj/busbar")); + + ModelBuilder.TransformsBuilder trans = model.transforms(); + doTransform(trans, TransformType.FIRST_PERSON_LEFT_HAND, new Vector3f(0, 0, 0), new Vector3f(0, 45, 0), 1.0F); + doTransform(trans, TransformType.FIRST_PERSON_RIGHT_HAND, new Vector3f(0, 0, 0), new Vector3f(0, 45, 0), 1.0F); + doTransform(trans, TransformType.THIRD_PERSON_LEFT_HAND, null, null, 1.0F); + doTransform(trans, TransformType.THIRD_PERSON_RIGHT_HAND, null, null, 1.0F); + doTransform(trans, TransformType.HEAD, new Vector3f(0, 0, 0), null, 1.0F); + doTransform(trans, TransformType.GUI, new Vector3f(0, 2, 0), new Vector3f(30, 45, 0), 0.75F); + doTransform(trans, TransformType.GROUND, new Vector3f(0, 0, 0), null, 1.0F); + doTransform(trans, TransformType.FIXED, new Vector3f(0, 0, -7), new Vector3f(-90, 0, 0), 1.0F); + } + + private void doTransform(ModelBuilder.TransformsBuilder transform, TransformType type, @Nullable Vector3f translation, @Nullable Vector3f rotationAngle, float scale){ + ModelBuilder.TransformsBuilder.TransformVecBuilder trans = transform.transform(type); + if(translation != null) + trans.translation(translation.x(), translation.y(), translation.z()); + if(rotationAngle != null) + trans.rotation(rotationAngle.x(), rotationAngle.y(), rotationAngle.z()); + trans.scale(scale); + trans.end(); + } + + private ItemModelBuilder obj(ItemLike item, String model){ + return getBuilder(item.asItem().getRegistryName().toString()) + .customLoader(OBJLoaderBuilder::begin) + .modelLocation(modLoc("models/" + model)).flipV(true).end(); + } +} diff --git a/src/datagen/java/twistedgate/overengineered/common/data/OERecipes.java b/src/datagen/java/twistedgate/overengineered/common/data/OERecipes.java index 108e3be..334aa90 100644 --- a/src/datagen/java/twistedgate/overengineered/common/data/OERecipes.java +++ b/src/datagen/java/twistedgate/overengineered/common/data/OERecipes.java @@ -1,18 +1,73 @@ package twistedgate.overengineered.common.data; +import java.util.HashMap; +import java.util.Map; import java.util.function.Consumer; +import blusunrize.immersiveengineering.api.wires.WireType; +import blusunrize.immersiveengineering.common.blocks.metal.BasicConnectorBlock; +import blusunrize.immersiveengineering.common.register.IEBlocks; +import blusunrize.immersiveengineering.common.register.IEBlocks.BlockEntry; import net.minecraft.data.DataGenerator; import net.minecraft.data.recipes.FinishedRecipe; import net.minecraft.data.recipes.RecipeProvider; +import net.minecraft.data.recipes.ShapedRecipeBuilder; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.ItemLike; +import twistedgate.overengineered.common.OEContent; +import twistedgate.overengineered.utils.ResourceUtils; public class OERecipes extends RecipeProvider{ + private final Map PATH_COUNT = new HashMap<>(); + public OERecipes(DataGenerator pGenerator){ super(pGenerator); } @Override protected void buildCraftingRecipes(Consumer out){ + BlockEntry> lv_relay = IEBlocks.Connectors.getEnergyConnector(WireType.LV_CATEGORY, true); + BlockEntry> mv_relay = IEBlocks.Connectors.getEnergyConnector(WireType.MV_CATEGORY, true); + + ShapedRecipeBuilder.shaped(OEContent.Blocks.BUSBAR.get(), 3) + .group("oe_busbar") + .pattern("CCC") + .pattern("LRM") + .define('C', Items.COPPER_INGOT) + .define('R', Items.RED_DYE) + .define('L', lv_relay) + .define('M', mv_relay) + .unlockedBy("has_copper_ingot", has(Items.COPPER_INGOT)) + .unlockedBy("has_" + toPath(lv_relay), has(lv_relay)) + .unlockedBy("has_" + toPath(mv_relay), has(mv_relay)) + .save(out, rl("busbar")); + ShapedRecipeBuilder.shaped(OEContent.Blocks.BUSBAR.get(), 3) + .group("oe_busbar") + .pattern("CCC") + .pattern("MRL") + .define('C', Items.COPPER_INGOT) + .define('R', Items.RED_DYE) + .define('L', lv_relay) + .define('M', mv_relay) + .unlockedBy("has_copper_ingot", has(Items.COPPER_INGOT)) + .unlockedBy("has_" + toPath(lv_relay), has(lv_relay)) + .unlockedBy("has_" + toPath(mv_relay), has(mv_relay)) + .save(out, rl("busbar")); + } + + private ResourceLocation rl(String str){ + if(PATH_COUNT.containsKey(str)){ + int count = PATH_COUNT.get(str) + 1; + PATH_COUNT.put(str, count); + return ResourceUtils.oe(str + count); + } + PATH_COUNT.put(str, 1); + return ResourceUtils.oe(str); + } + + private String toPath(ItemLike src){ + return src.asItem().getRegistryName().getPath(); } } diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache new file mode 100644 index 0000000..658c4fa --- /dev/null +++ b/src/generated/resources/.cache/cache @@ -0,0 +1,13 @@ +d8c80785920283e4fe9e0230b1f92e0824da0dff assets/overengineered/blockstates/busbar.json +165737f978732b3be1b991273410046a62c3602b assets/overengineered/models/block/busbar_bend.json +d38cc03cf37de4a0b62b6eb9167fb1282b38eedf assets/overengineered/models/block/busbar_horizontal_down.json +a3f79a2d4727885bc80374947d26cf1413cab082 assets/overengineered/models/block/busbar_horizontal_up.json +505c39a86a3e6ac0f2f99af30685e9ff435a7d3a assets/overengineered/models/block/busbar_with_insulators.json +83c90e24f79a0745afff4c0889ff8fb4c5191978 assets/overengineered/models/block/busbar_with_insulators_pre_y_rotated.json +67e6948440b91969741558fa0e319bfa0623ecdc assets/overengineered/models/block/busbar_without_insulators.json +95c68499016695a3c9c71e95d44b78e5a7b70abb assets/overengineered/models/block/busbar_without_insulators_pre_y_rotated.json +47d3511e428faccc03c73d493604da978bad617a assets/overengineered/models/item/busbar.json +f669ede4831f92d60da61cf680f634f40a2c6c2b data/overengineered/advancements/recipes/overengineered/busbar.json +84e62a1037f58c750ce069f12abdafe49f8be47b data/overengineered/advancements/recipes/overengineered/busbar2.json +9d6eee99845fd97468aa2085f9f4daa638d8cd7c data/overengineered/recipes/busbar.json +5fe8d5a4a47d15ce3dcc66fce0524cfca955107e data/overengineered/recipes/busbar2.json diff --git a/src/generated/resources/assets/overengineered/blockstates/busbar.json b/src/generated/resources/assets/overengineered/blockstates/busbar.json new file mode 100644 index 0000000..f66f7cf --- /dev/null +++ b/src/generated/resources/assets/overengineered/blockstates/busbar.json @@ -0,0 +1,290 @@ +{ + "variants": { + "shape=insulators_down_north_south": { + "model": "overengineered:block/busbar_with_insulators" + }, + "shape=insulators_down_east_west": { + "model": "overengineered:block/busbar_with_insulators", + "y": 90 + }, + "shape=insulators_up_north_south": { + "model": "overengineered:block/busbar_with_insulators", + "x": 180 + }, + "shape=insulators_up_east_west": { + "model": "overengineered:block/busbar_with_insulators", + "x": 180, + "y": 90 + }, + "shape=insulators_north_up_down": { + "model": "overengineered:block/busbar_with_insulators", + "x": -90 + }, + "shape=insulators_east_up_down": { + "model": "overengineered:block/busbar_with_insulators", + "x": -90, + "y": 90 + }, + "shape=insulators_south_up_down": { + "model": "overengineered:block/busbar_with_insulators", + "x": -90, + "y": 180 + }, + "shape=insulators_west_up_down": { + "model": "overengineered:block/busbar_with_insulators", + "x": -90, + "y": 270 + }, + "shape=insulators_north_east_west": { + "model": "overengineered:block/busbar_with_insulators_pre_y_rotated", + "x": -90 + }, + "shape=insulators_east_north_south": { + "model": "overengineered:block/busbar_with_insulators_pre_y_rotated", + "x": -90, + "y": 90 + }, + "shape=insulators_south_east_west": { + "model": "overengineered:block/busbar_with_insulators_pre_y_rotated", + "x": -90, + "y": 180 + }, + "shape=insulators_west_north_south": { + "model": "overengineered:block/busbar_with_insulators_pre_y_rotated", + "x": -90, + "y": 270 + }, + "shape=floating_down_north_south": { + "model": "overengineered:block/busbar_without_insulators" + }, + "shape=floating_down_east_west": { + "model": "overengineered:block/busbar_without_insulators", + "y": 90 + }, + "shape=floating_up_north_south": { + "model": "overengineered:block/busbar_without_insulators", + "x": 180 + }, + "shape=floating_up_east_west": { + "model": "overengineered:block/busbar_without_insulators", + "x": 180, + "y": 90 + }, + "shape=floating_north_up_down": { + "model": "overengineered:block/busbar_without_insulators", + "x": -90 + }, + "shape=floating_east_up_down": { + "model": "overengineered:block/busbar_without_insulators", + "x": -90, + "y": 90 + }, + "shape=floating_south_up_down": { + "model": "overengineered:block/busbar_without_insulators", + "x": -90, + "y": 180 + }, + "shape=floating_west_up_down": { + "model": "overengineered:block/busbar_without_insulators", + "x": -90, + "y": 270 + }, + "shape=floating_north_east_west": { + "model": "overengineered:block/busbar_without_insulators_pre_y_rotated", + "x": -90 + }, + "shape=floating_east_north_south": { + "model": "overengineered:block/busbar_without_insulators_pre_y_rotated", + "x": -90, + "y": 90 + }, + "shape=floating_south_east_west": { + "model": "overengineered:block/busbar_without_insulators_pre_y_rotated", + "x": -90, + "y": 180 + }, + "shape=floating_west_north_south": { + "model": "overengineered:block/busbar_without_insulators_pre_y_rotated", + "x": -90, + "y": 270 + }, + "shape=bend_down_north_east": { + "model": "overengineered:block/busbar_bend", + "y": 90 + }, + "shape=bend_down_east_south": { + "model": "overengineered:block/busbar_bend", + "y": 180 + }, + "shape=bend_down_south_west": { + "model": "overengineered:block/busbar_bend", + "y": 270 + }, + "shape=bend_down_west_north": { + "model": "overengineered:block/busbar_bend" + }, + "shape=bend_up_north_east": { + "model": "overengineered:block/busbar_bend", + "x": 180, + "y": 180 + }, + "shape=bend_up_east_south": { + "model": "overengineered:block/busbar_bend", + "x": 180, + "y": 270 + }, + "shape=bend_up_south_west": { + "model": "overengineered:block/busbar_bend", + "x": 180 + }, + "shape=bend_up_west_north": { + "model": "overengineered:block/busbar_bend", + "x": 180, + "y": 90 + }, + "shape=bend_north_down_east": { + "model": "overengineered:block/busbar_bend", + "x": -90 + }, + "shape=bend_north_east_up": { + "model": "overengineered:block/busbar_bend", + "x": -90, + "y": 90 + }, + "shape=bend_north_up_west": { + "model": "overengineered:block/busbar_bend", + "x": -90, + "y": 180 + }, + "shape=bend_north_west_down": { + "model": "overengineered:block/busbar_bend", + "x": -90, + "y": 270 + }, + "shape=bend_east_down_south": { + "model": "overengineered:block/busbar_bend", + "x": -90 + }, + "shape=bend_east_south_up": { + "model": "overengineered:block/busbar_bend", + "x": -90, + "y": 90 + }, + "shape=bend_east_up_north": { + "model": "overengineered:block/busbar_bend", + "x": -90, + "y": 180 + }, + "shape=bend_east_north_down": { + "model": "overengineered:block/busbar_bend", + "x": -90, + "y": 270 + }, + "shape=bend_south_down_west": { + "model": "overengineered:block/busbar_bend", + "x": -90 + }, + "shape=bend_south_west_up": { + "model": "overengineered:block/busbar_bend", + "x": -90, + "y": 90 + }, + "shape=bend_south_up_east": { + "model": "overengineered:block/busbar_bend", + "x": -90, + "y": 180 + }, + "shape=bend_south_east_down": { + "model": "overengineered:block/busbar_bend", + "x": -90, + "y": 270 + }, + "shape=bend_west_down_north": { + "model": "overengineered:block/busbar_bend", + "x": -90 + }, + "shape=bend_west_north_up": { + "model": "overengineered:block/busbar_bend", + "x": -90, + "y": 90 + }, + "shape=bend_west_up_south": { + "model": "overengineered:block/busbar_bend", + "x": -90, + "y": 180 + }, + "shape=bend_west_south_down": { + "model": "overengineered:block/busbar_bend", + "x": -90, + "y": 270 + }, + "shape=edge_inside_down_north_up_south": { + "model": "overengineered:block/busbar_horizontal_up", + "y": 180 + }, + "shape=edge_inside_down_east_up_west": { + "model": "overengineered:block/busbar_horizontal_up", + "y": 270 + }, + "shape=edge_inside_down_south_up_north": { + "model": "overengineered:block/busbar_horizontal_up" + }, + "shape=edge_inside_down_west_up_east": { + "model": "overengineered:block/busbar_horizontal_up", + "y": 90 + }, + "shape=edge_inside_up_north_down_south": { + "model": "overengineered:block/busbar_horizontal_up", + "x": 180 + }, + "shape=edge_inside_up_east_down_west": { + "model": "overengineered:block/busbar_horizontal_up", + "x": 180, + "y": 90 + }, + "shape=edge_inside_up_south_down_north": { + "model": "overengineered:block/busbar_horizontal_up", + "x": 180, + "y": 180 + }, + "shape=edge_inside_up_west_down_east": { + "model": "overengineered:block/busbar_horizontal_up", + "x": 180, + "y": 270 + }, + "shape=edge_outside_down_north_up_south": { + "model": "overengineered:block/busbar_horizontal_down" + }, + "shape=edge_outside_down_east_up_west": { + "model": "overengineered:block/busbar_horizontal_down", + "y": 90 + }, + "shape=edge_outside_down_south_up_north": { + "model": "overengineered:block/busbar_horizontal_down", + "y": 180 + }, + "shape=edge_outside_down_west_up_east": { + "model": "overengineered:block/busbar_horizontal_down", + "y": 270 + }, + "shape=edge_outside_up_north_down_south": { + "model": "overengineered:block/busbar_horizontal_down", + "x": 180 + }, + "shape=edge_outside_up_east_down_west": { + "model": "overengineered:block/busbar_horizontal_down", + "x": 180, + "y": 90 + }, + "shape=edge_outside_up_south_down_north": { + "model": "overengineered:block/busbar_horizontal_down", + "x": 180, + "y": 180 + }, + "shape=edge_outside_up_west_down_east": { + "model": "overengineered:block/busbar_horizontal_down", + "x": 180, + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/overengineered/models/block/busbar_bend.json b/src/generated/resources/assets/overengineered/models/block/busbar_bend.json new file mode 100644 index 0000000..5680294 --- /dev/null +++ b/src/generated/resources/assets/overengineered/models/block/busbar_bend.json @@ -0,0 +1,9 @@ +{ + "textures": { + "texture": "overengineered:block/obj/busbar", + "particle": "overengineered:block/obj/busbar" + }, + "loader": "forge:obj", + "model": "overengineered:models/block/obj/busbar/busbar_bend.obj", + "flip-v": true +} \ No newline at end of file diff --git a/src/generated/resources/assets/overengineered/models/block/busbar_horizontal_down.json b/src/generated/resources/assets/overengineered/models/block/busbar_horizontal_down.json new file mode 100644 index 0000000..05ac416 --- /dev/null +++ b/src/generated/resources/assets/overengineered/models/block/busbar_horizontal_down.json @@ -0,0 +1,9 @@ +{ + "textures": { + "texture": "overengineered:block/obj/busbar", + "particle": "overengineered:block/obj/busbar" + }, + "loader": "forge:obj", + "model": "overengineered:models/block/obj/busbar/busbar_edge_outside.obj", + "flip-v": true +} \ No newline at end of file diff --git a/src/generated/resources/assets/overengineered/models/block/busbar_horizontal_up.json b/src/generated/resources/assets/overengineered/models/block/busbar_horizontal_up.json new file mode 100644 index 0000000..1a52db5 --- /dev/null +++ b/src/generated/resources/assets/overengineered/models/block/busbar_horizontal_up.json @@ -0,0 +1,9 @@ +{ + "textures": { + "texture": "overengineered:block/obj/busbar", + "particle": "overengineered:block/obj/busbar" + }, + "loader": "forge:obj", + "model": "overengineered:models/block/obj/busbar/busbar_edge_inside.obj", + "flip-v": true +} \ No newline at end of file diff --git a/src/generated/resources/assets/overengineered/models/block/busbar_with_insulators.json b/src/generated/resources/assets/overengineered/models/block/busbar_with_insulators.json new file mode 100644 index 0000000..ddc4de8 --- /dev/null +++ b/src/generated/resources/assets/overengineered/models/block/busbar_with_insulators.json @@ -0,0 +1,9 @@ +{ + "textures": { + "texture": "overengineered:block/obj/busbar", + "particle": "overengineered:block/obj/busbar" + }, + "loader": "forge:obj", + "model": "overengineered:models/block/obj/busbar/busbar_a.obj", + "flip-v": true +} \ No newline at end of file diff --git a/src/generated/resources/assets/overengineered/models/block/busbar_with_insulators_pre_y_rotated.json b/src/generated/resources/assets/overengineered/models/block/busbar_with_insulators_pre_y_rotated.json new file mode 100644 index 0000000..505bd1b --- /dev/null +++ b/src/generated/resources/assets/overengineered/models/block/busbar_with_insulators_pre_y_rotated.json @@ -0,0 +1,9 @@ +{ + "textures": { + "texture": "overengineered:block/obj/busbar", + "particle": "overengineered:block/obj/busbar" + }, + "loader": "forge:obj", + "model": "overengineered:models/block/obj/busbar/busbar_a_alt.obj", + "flip-v": true +} \ No newline at end of file diff --git a/src/generated/resources/assets/overengineered/models/block/busbar_without_insulators.json b/src/generated/resources/assets/overengineered/models/block/busbar_without_insulators.json new file mode 100644 index 0000000..69625dd --- /dev/null +++ b/src/generated/resources/assets/overengineered/models/block/busbar_without_insulators.json @@ -0,0 +1,9 @@ +{ + "textures": { + "texture": "overengineered:block/obj/busbar", + "particle": "overengineered:block/obj/busbar" + }, + "loader": "forge:obj", + "model": "overengineered:models/block/obj/busbar/busbar_b.obj", + "flip-v": true +} \ No newline at end of file diff --git a/src/generated/resources/assets/overengineered/models/block/busbar_without_insulators_pre_y_rotated.json b/src/generated/resources/assets/overengineered/models/block/busbar_without_insulators_pre_y_rotated.json new file mode 100644 index 0000000..908434e --- /dev/null +++ b/src/generated/resources/assets/overengineered/models/block/busbar_without_insulators_pre_y_rotated.json @@ -0,0 +1,9 @@ +{ + "textures": { + "texture": "overengineered:block/obj/busbar", + "particle": "overengineered:block/obj/busbar" + }, + "loader": "forge:obj", + "model": "overengineered:models/block/obj/busbar/busbar_b_alt.obj", + "flip-v": true +} \ No newline at end of file diff --git a/src/generated/resources/assets/overengineered/models/item/busbar.json b/src/generated/resources/assets/overengineered/models/item/busbar.json new file mode 100644 index 0000000..0e819b8 --- /dev/null +++ b/src/generated/resources/assets/overengineered/models/item/busbar.json @@ -0,0 +1,53 @@ +{ + "display": { + "firstperson_lefthand": { + "rotation": [ + 0, + 45, + 0 + ] + }, + "firstperson_righthand": { + "rotation": [ + 0, + 45, + 0 + ] + }, + "gui": { + "rotation": [ + 30, + 45, + 0 + ], + "translation": [ + 0, + 2, + 0 + ], + "scale": [ + 0.75, + 0.75, + 0.75 + ] + }, + "fixed": { + "rotation": [ + -90, + 0, + 0 + ], + "translation": [ + 0, + 0, + -7 + ] + } + }, + "textures": { + "texture": "overengineered:block/obj/busbar" + }, + "loader": "forge:obj", + "model": "overengineered:models/block/obj/busbar/busbar_a.obj", + "flip-v": true +} \ No newline at end of file diff --git a/src/generated/resources/data/overengineered/advancements/recipes/overengineered/busbar.json b/src/generated/resources/data/overengineered/advancements/recipes/overengineered/busbar.json new file mode 100644 index 0000000..d290180 --- /dev/null +++ b/src/generated/resources/data/overengineered/advancements/recipes/overengineered/busbar.json @@ -0,0 +1,60 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "overengineered:busbar" + ] + }, + "criteria": { + "has_copper_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "items": [ + "minecraft:copper_ingot" + ] + } + ] + } + }, + "has_connector_lv_relay": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "items": [ + "immersiveengineering:connector_lv_relay" + ] + } + ] + } + }, + "has_connector_mv_relay": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "items": [ + "immersiveengineering:connector_mv_relay" + ] + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "overengineered:busbar" + } + } + }, + "requirements": [ + [ + "has_copper_ingot", + "has_connector_lv_relay", + "has_connector_mv_relay", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/overengineered/advancements/recipes/overengineered/busbar2.json b/src/generated/resources/data/overengineered/advancements/recipes/overengineered/busbar2.json new file mode 100644 index 0000000..f336118 --- /dev/null +++ b/src/generated/resources/data/overengineered/advancements/recipes/overengineered/busbar2.json @@ -0,0 +1,60 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "overengineered:busbar2" + ] + }, + "criteria": { + "has_copper_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "items": [ + "minecraft:copper_ingot" + ] + } + ] + } + }, + "has_connector_lv_relay": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "items": [ + "immersiveengineering:connector_lv_relay" + ] + } + ] + } + }, + "has_connector_mv_relay": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "items": [ + "immersiveengineering:connector_mv_relay" + ] + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "overengineered:busbar2" + } + } + }, + "requirements": [ + [ + "has_copper_ingot", + "has_connector_lv_relay", + "has_connector_mv_relay", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/overengineered/recipes/busbar.json b/src/generated/resources/data/overengineered/recipes/busbar.json new file mode 100644 index 0000000..fa7efda --- /dev/null +++ b/src/generated/resources/data/overengineered/recipes/busbar.json @@ -0,0 +1,26 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "oe_busbar", + "pattern": [ + "CCC", + "LRM" + ], + "key": { + "C": { + "item": "minecraft:copper_ingot" + }, + "R": { + "item": "minecraft:red_dye" + }, + "L": { + "item": "immersiveengineering:connector_lv_relay" + }, + "M": { + "item": "immersiveengineering:connector_mv_relay" + } + }, + "result": { + "item": "overengineered:busbar", + "count": 3 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/overengineered/recipes/busbar2.json b/src/generated/resources/data/overengineered/recipes/busbar2.json new file mode 100644 index 0000000..44d154d --- /dev/null +++ b/src/generated/resources/data/overengineered/recipes/busbar2.json @@ -0,0 +1,26 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "oe_busbar", + "pattern": [ + "CCC", + "MRL" + ], + "key": { + "C": { + "item": "minecraft:copper_ingot" + }, + "R": { + "item": "minecraft:red_dye" + }, + "L": { + "item": "immersiveengineering:connector_lv_relay" + }, + "M": { + "item": "immersiveengineering:connector_mv_relay" + } + }, + "result": { + "item": "overengineered:busbar", + "count": 3 + } +} \ No newline at end of file diff --git a/src/main/java/twistedgate/overengineered/OverEngineered.java b/src/main/java/twistedgate/overengineered/OverEngineered.java index 2f32a30..745f0c3 100644 --- a/src/main/java/twistedgate/overengineered/OverEngineered.java +++ b/src/main/java/twistedgate/overengineered/OverEngineered.java @@ -9,7 +9,6 @@ import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.Items; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.server.ServerAboutToStartEvent; import net.minecraftforge.event.server.ServerStartedEvent; @@ -27,8 +26,9 @@ import twistedgate.overengineered.common.CommonProxy; import twistedgate.overengineered.common.OEContent; import twistedgate.overengineered.common.OERegisters; +import twistedgate.overengineered.common.OETileTypes; +import twistedgate.overengineered.utils.ExternalModContent; -// The value here should match an entry in the META-INF/mods.toml file @Mod(OverEngineered.MODID) public class OverEngineered{ public static final String MODID = "overengineered"; @@ -39,8 +39,7 @@ public class OverEngineered{ @Override @Nonnull public ItemStack makeIcon(){ - // TODO - return new ItemStack(Items.BARRIER); + return new ItemStack(OEContent.Blocks.BUSBAR.get()); } }; @@ -74,6 +73,9 @@ public OverEngineered(){ IEventBus eBus = FMLJavaModLoadingContext.get().getModEventBus(); OERegisters.addRegistersToEventBus(eBus); + OEContent.populate(); + OETileTypes.forceClassLoad(); + MinecraftForge.EVENT_BUS.register(this); } @@ -83,9 +85,12 @@ private void setup(final FMLCommonSetupEvent event){ proxy.preInit(); OEContent.init(event); + proxy.init(); proxy.postInit(); + + ExternalModContent.init(); } public void loadComplete(FMLLoadCompleteEvent event){ diff --git a/src/main/java/twistedgate/overengineered/client/BlockRenderLayers.java b/src/main/java/twistedgate/overengineered/client/BlockRenderLayers.java new file mode 100644 index 0000000..82747a7 --- /dev/null +++ b/src/main/java/twistedgate/overengineered/client/BlockRenderLayers.java @@ -0,0 +1,27 @@ +package twistedgate.overengineered.client; + +import java.util.function.Predicate; + +import net.minecraft.client.renderer.ItemBlockRenderTypes; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.world.level.block.Block; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; +import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; +import net.minecraftforge.registries.RegistryObject; +import twistedgate.overengineered.OverEngineered; +import twistedgate.overengineered.common.OEContent; + +@EventBusSubscriber(modid = OverEngineered.MODID, value = Dist.CLIENT, bus = Bus.MOD) +public class BlockRenderLayers{ + @SubscribeEvent + public static void clientSetup(FMLClientSetupEvent event){ + setRenderLayer(OEContent.Blocks.BUSBAR, t -> t == RenderType.cutout() || t == RenderType.solid()); + } + + private static void setRenderLayer(RegistryObject block, Predicate types){ + ItemBlockRenderTypes.setRenderLayer(block.get(), types); + } +} diff --git a/src/main/java/twistedgate/overengineered/common/OEContent.java b/src/main/java/twistedgate/overengineered/common/OEContent.java index 0f16dff..d1703e7 100644 --- a/src/main/java/twistedgate/overengineered/common/OEContent.java +++ b/src/main/java/twistedgate/overengineered/common/OEContent.java @@ -1,10 +1,16 @@ package twistedgate.overengineered.common; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.Item; import net.minecraftforge.fml.event.lifecycle.ParallelDispatchEvent; +import net.minecraftforge.registries.RegistryObject; +import twistedgate.overengineered.OverEngineered; +import twistedgate.overengineered.common.blocks.busbar.BusbarBlock; public class OEContent{ public static class Blocks{ + public static final RegistryObject BUSBAR = OERegisters.registerBlock("busbar", BusbarBlock::new, b -> new BlockItem(b, new Item.Properties().tab(OverEngineered.creativeTab))); private static void forceClassLoad(){ } diff --git a/src/main/java/twistedgate/overengineered/common/OERegisters.java b/src/main/java/twistedgate/overengineered/common/OERegisters.java index 0503599..7b0532c 100644 --- a/src/main/java/twistedgate/overengineered/common/OERegisters.java +++ b/src/main/java/twistedgate/overengineered/common/OERegisters.java @@ -44,10 +44,16 @@ public static void addRegistersToEventBus(IEventBus eventBus){ MOB_EFFECT.register(eventBus); } - protected static RegistryObject registerBlock(String name, Supplier blockConstructor){ + /** Registers a {@link Block} without a {@link BlockItem} */ + protected static RegistryObject registerSimpleBlock(String name, Supplier blockConstructor){ return registerBlock(name, blockConstructor, null); } + /** Registers a {@link Block} with a {@link BlockItem} being automaticly added to {@link OverEngineered#creativeTab} */ + protected static RegistryObject registerTabbedBlock(String name, Supplier blockConstructor, Item.Properties properties){ + return registerBlock(name, blockConstructor, b -> new BlockItem(b, properties.tab(OverEngineered.creativeTab))); + } + protected static RegistryObject registerBlock(String name, Supplier blockConstructor, @Nullable Function blockItem){ RegistryObject block = BLOCK_REGISTER.register(name, blockConstructor); if(blockItem != null){ diff --git a/src/main/java/twistedgate/overengineered/common/OETileTypes.java b/src/main/java/twistedgate/overengineered/common/OETileTypes.java new file mode 100644 index 0000000..48d6860 --- /dev/null +++ b/src/main/java/twistedgate/overengineered/common/OETileTypes.java @@ -0,0 +1,12 @@ +package twistedgate.overengineered.common; + +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraftforge.registries.RegistryObject; +import twistedgate.overengineered.common.blocks.tileentity.BusbarTileEntity; + +public class OETileTypes{ + public static final RegistryObject> BUS = OERegisters.registerTE("tile_bus", BusbarTileEntity::new, OEContent.Blocks.BUSBAR); + + public static void forceClassLoad(){ + } +} diff --git a/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java b/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java new file mode 100644 index 0000000..71204e6 --- /dev/null +++ b/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java @@ -0,0 +1,181 @@ +package twistedgate.overengineered.common.blocks.busbar; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.EntityBlock; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition.Builder; +import net.minecraft.world.level.block.state.properties.EnumProperty; +import net.minecraft.world.level.material.Material; +import net.minecraft.world.level.material.MaterialColor; +import net.minecraft.world.level.material.PushReaction; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; +import twistedgate.overengineered.common.OETileTypes; +import twistedgate.overengineered.common.blocks.OEBlockBase; +import twistedgate.overengineered.common.blocks.tileentity.BusbarTileEntity; +import twistedgate.overengineered.utils.ExternalModContent; +import twistedgate.overengineered.utils.enums.EnumBusbarShape; + +public class BusbarBlock extends OEBlockBase implements EntityBlock{ + private static final Material MATERIAL = new Material(MaterialColor.METAL, false, false, true, true, false, false, PushReaction.BLOCK); + + public static final EnumProperty SHAPE = EnumProperty.create("shape", EnumBusbarShape.class); + + public BusbarBlock(){ + super(Block.Properties.of(MATERIAL).strength(2.0F, 10.0F).sound(SoundType.METAL).requiresCorrectToolForDrops()); + + registerDefaultState(getStateDefinition().any() + .setValue(SHAPE, EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH) + ); + } + + @Override + protected void createBlockStateDefinition(Builder builder){ + builder.add(SHAPE); + } + + @Override + public boolean propagatesSkylightDown(BlockState pState, BlockGetter pLevel, BlockPos pPos){ + return true; + } + + public static boolean isBusbar(Level level, BlockPos pos){ + return isBusbar(level.getBlockState(pos)); + } + + public static boolean isBusbar(BlockState state){ + return state.getBlock() instanceof BusbarBlock; + } + + @Override + public InteractionResult use(BlockState pState, Level pLevel, BlockPos pPos, Player pPlayer, InteractionHand pHand, BlockHitResult pHit){ + if(ExternalModContent.isIEHammer(pPlayer.getItemInHand(pHand))){ + EnumBusbarShape shape = pState.getValue(SHAPE); + if(EnumBusbarShape.Type.STRAIGHT_SEGMENTS.contains(shape)){ + EnumBusbarShape newShape = null; + + // @formatter:off + if(shape == EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH)newShape = EnumBusbarShape.FLOATING_DOWN_NORTH_SOUTH; + if(shape == EnumBusbarShape.FLOATING_DOWN_NORTH_SOUTH) newShape = EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH; + if(shape == EnumBusbarShape.INSULATORS_DOWN_EAST_WEST) newShape = EnumBusbarShape.FLOATING_DOWN_EAST_WEST; + if(shape == EnumBusbarShape.FLOATING_DOWN_EAST_WEST) newShape = EnumBusbarShape.INSULATORS_DOWN_EAST_WEST; + // @formatter:on + + if(newShape != null && newShape != shape){ + pLevel.setBlock(pPos, pState.setValue(SHAPE, newShape), 3); + return InteractionResult.SUCCESS; + } + } + + } + return InteractionResult.PASS; + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext pContext){ + Direction direction = pContext.getHorizontalDirection(); + Direction face = pContext.getClickedFace(); + + EnumBusbarShape shape = switch(face){ + case DOWN -> (direction == Direction.EAST || direction == Direction.WEST) ? EnumBusbarShape.INSULATORS_UP_EAST_WEST : EnumBusbarShape.INSULATORS_UP_NORTH_SOUTH; + case UP -> (direction == Direction.EAST || direction == Direction.WEST) ? EnumBusbarShape.INSULATORS_DOWN_EAST_WEST : EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH; + case NORTH -> EnumBusbarShape.INSULATORS_SOUTH_UP_DOWN; + case EAST -> EnumBusbarShape.INSULATORS_WEST_UP_DOWN; + case SOUTH -> EnumBusbarShape.INSULATORS_NORTH_UP_DOWN; + case WEST -> EnumBusbarShape.INSULATORS_EAST_UP_DOWN; + default -> EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH; + }; + + return defaultBlockState().setValue(SHAPE, shape); + } + + @Override + public void setPlacedBy(Level level, BlockPos pos, BlockState state, LivingEntity placer, ItemStack stack){ + } + + @Override + public void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean isMoving){ + state = updateDir(level, pos, state, true); + } + + private BlockState updateDir(Level level, BlockPos pos, BlockState state, boolean placing){ + if(level.isClientSide){ + return state; + }else{ + EnumBusbarShape shape = state.getValue(SHAPE); + return new BusbarState(level, pos, state).place(placing, shape).getState(); + } + } + + @Override + public void neighborChanged(BlockState stateIn, Level levelIn, BlockPos posIn, Block lastBlockIn, BlockPos fromPosIn, boolean isMovingIn){ + } + + @Override + public BlockEntity newBlockEntity(BlockPos pPos, BlockState pState){ + BusbarTileEntity te = OETileTypes.BUS.get().create(pPos, pState); + return te; + } + + @Override + public BlockEntityTicker getTicker(Level pLevel, BlockState pState, BlockEntityType pBlockEntityType){ + return createTickerHelper(pLevel.isClientSide, pBlockEntityType, OETileTypes.BUS); + } + + @Override + public VoxelShape getShape(BlockState pState, BlockGetter pLevel, BlockPos pPos, CollisionContext pContext){ + // TODO Cache them, compress and reuse duplicates + + // @formatter:off + switch(pState.getValue(SHAPE)){ + case INSULATORS_UP_NORTH_SOUTH: case FLOATING_UP_NORTH_SOUTH: { + return Shapes.create(0.125, 0.75, 0.0, 0.875, 1.0, 1.0); + } + case INSULATORS_DOWN_EAST_WEST: case FLOATING_DOWN_EAST_WEST:{ + return Shapes.create(0.0, 0.0, 0.125, 1.0, 0.25, 0.875); + } + case INSULATORS_UP_EAST_WEST: case FLOATING_UP_EAST_WEST:{ + return Shapes.create(0.0, 0.75, 0.125, 1.0, 1.0, 0.875); + } + case INSULATORS_DOWN_NORTH_SOUTH: case FLOATING_DOWN_NORTH_SOUTH:{ + return Shapes.create(0.125, 0.0, 0.0, 0.875, 0.25, 1.0); + } + + case INSULATORS_NORTH_UP_DOWN: return Shapes.create(0.125, 0.0, 0.0, 0.875, 1.0, 0.25); + case INSULATORS_EAST_UP_DOWN: return Shapes.create(0.75, 0.0, 0.125, 1.0, 1.0, 0.875); + case INSULATORS_SOUTH_UP_DOWN: return Shapes.create(0.125, 0.0, 0.75, 0.875, 1.0, 1.0); + case INSULATORS_WEST_UP_DOWN: return Shapes.create(0.0, 0.0, 0.125, 0.25, 1.0, 0.875); + + case BEND_DOWN_NORTH_EAST: return Shapes.create(0.125, 0.0, 0.0, 1.0, 0.25, 0.875); + case BEND_DOWN_EAST_SOUTH: return Shapes.create(0.125, 0.0, 0.125, 1.0, 0.25, 1.0); + case BEND_DOWN_SOUTH_WEST: return Shapes.create(0.0, 0.0, 0.125, 0.875, 0.25, 1.0); + case BEND_DOWN_WEST_NORTH: return Shapes.create(0.0, 0.0, 0.0, 0.875, 0.25, 0.875); + + case BEND_UP_NORTH_EAST: return Shapes.create(0.125, 0.75, 0.0, 1.0, 1.0, 0.875); + case BEND_UP_EAST_SOUTH: return Shapes.create(0.125, 0.75, 0.125, 1.0, 1.0, 1.0); + case BEND_UP_SOUTH_WEST: return Shapes.create(0.0, 0.75, 0.125, 0.875, 1.0, 1.0); + case BEND_UP_WEST_NORTH: return Shapes.create(0.0, 0.75, 0.0, 0.875, 1.0, 0.875); + + default:{ + return Shapes.create(0.0, 0.0, 0.0, 1.0, 1.0, 1.0); + } + } + // @formatter:on + } +} diff --git a/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarState.java b/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarState.java new file mode 100644 index 0000000..bf908b3 --- /dev/null +++ b/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarState.java @@ -0,0 +1,497 @@ +package twistedgate.overengineered.common.blocks.busbar; + +import java.util.ArrayList; +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.BaseRailBlock; +import net.minecraft.world.level.block.RailBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.RailShape; +import twistedgate.overengineered.OverEngineered; +import twistedgate.overengineered.utils.enums.EnumBusbarShape; + +public class BusbarState{ + private final List connections = new ArrayList<>(); + private final Level level; + private final BlockPos pos; + private final boolean isStraight; + private BlockState state; + public BusbarState(Level pLevel, BlockPos pPos, BlockState pState){ + this.level = pLevel; + this.pos = pPos; + this.state = pState; + + EnumBusbarShape shape = this.state.getValue(BusbarBlock.SHAPE); + + this.isStraight = !EnumBusbarShape.Type.STRAIGHT_SEGMENTS.contains(shape); + + updateConnections(shape); + } + + private boolean canConnectTo(BusbarState busState){ + return connectsTo(busState) || this.connections.size() != 2; + } + + private boolean connectsTo(BusbarState busState){ + return hasConnection(busState.pos); + } + + @Nullable + private BusbarState getBus(BlockPos pos){ + BlockState blockState = this.level.getBlockState(pos); + // TODO May need special cases for edges. (Left "original" below) + return BusbarBlock.isBusbar(blockState) ? new BusbarState(this.level, pos, blockState) : null; + + /* + if(BusbarBlock.isBusbar(blockState)){ + return new BusbarState(this.level, pos, blockState); + }else{ + BlockPos other = pos.above(); + blockState = this.level.getBlockState(other); + if(BusbarBlock.isBusbar(blockState)){ + return new BusbarState(this.level, other, blockState); + }else{ + other = pos.below(); + blockState = this.level.getBlockState(other); + return BusbarBlock.isBusbar(blockState) ? new BusbarState(this.level, other, blockState) : null; + } + } + */ + } + + public BlockState getState(){ + return this.state; + } + + private boolean hasConnection(BlockPos pos){ + for(int i = 0;i < this.connections.size();++i){ + BlockPos blockpos = this.connections.get(i); + if(blockpos.getX() == pos.getX() && blockpos.getZ() == pos.getZ()){ + return true; + } + } + return false; + } + + private boolean hasNeighborBus(BlockPos pos){ + BusbarState busState = getBus(pos); + if(busState == null){ + return false; + } + + busState.removeSoftConnections(); + return busState.canConnectTo(this); + } + + public BusbarState place(boolean placing, EnumBusbarShape shapeIn){ + BlockPos posDown = this.pos.below(); + BlockPos posUp = this.pos.above(); + BlockPos posNorth = this.pos.north(); + BlockPos posEast = this.pos.east(); + BlockPos posSouth = this.pos.south(); + BlockPos posWest = this.pos.west(); + + boolean hasDown = hasNeighborBus(posDown); + boolean hasUp = hasNeighborBus(posUp); + boolean hasNorth = hasNeighborBus(posNorth); + boolean hasEast = hasNeighborBus(posEast); + boolean hasSouth = hasNeighborBus(posSouth); + boolean hasWest = hasNeighborBus(posWest); + + EnumBusbarShape shape = null; + + boolean ns = hasNorth || hasSouth; + boolean ew = hasEast || hasWest; + boolean ud = hasUp || hasDown; + if(ns && !ew){ + shape = EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH; + } + if(ew && !ns){ + shape = EnumBusbarShape.INSULATORS_DOWN_EAST_WEST; + } + + boolean se = hasSouth && hasEast; + boolean sw = hasSouth && hasWest; + boolean ne = hasNorth && hasEast; + boolean nw = hasNorth && hasWest; + if(!this.isStraight){ + if(se && !hasNorth && !hasWest){ + shape = EnumBusbarShape.BEND_DOWN_EAST_SOUTH; + } + + if(sw && !hasNorth && !hasEast){ + shape = EnumBusbarShape.BEND_DOWN_SOUTH_WEST; + } + + if(nw && !hasSouth && !hasEast){ + shape = EnumBusbarShape.BEND_DOWN_WEST_NORTH; + } + + if(ne && !hasSouth && !hasWest){ + shape = EnumBusbarShape.BEND_DOWN_NORTH_EAST; + } + } + + if(shape == null){ + if(ns && ew){ + shape = shapeIn; + }else if(ns){ + shape = EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH; + }else if(ew){ + shape = EnumBusbarShape.INSULATORS_DOWN_EAST_WEST; + } + + if(!this.isStraight){ + if(nw){ + shape = EnumBusbarShape.BEND_DOWN_WEST_NORTH; + } + + if(ne){ + shape = EnumBusbarShape.BEND_DOWN_NORTH_EAST; + } + + if(sw){ + shape = EnumBusbarShape.BEND_DOWN_SOUTH_WEST; + } + + if(se){ + shape = EnumBusbarShape.BEND_DOWN_EAST_SOUTH; + } + } + } + + // ----------------------------------------------------------- + if(shape == null){ + shape = shapeIn; + } + + updateConnections(shape); + this.state = this.state.setValue(BusbarBlock.SHAPE, shape); + if(placing || this.level.getBlockState(this.pos) != this.state){ + this.level.setBlock(this.pos, this.state, 3); + + for(int i = 0;i < this.connections.size();i++){ + BusbarState busState = getBus(this.connections.get(i)); + if(busState != null){ + busState.removeSoftConnections(); + if(busState.canConnectTo(this)){ + busState.connectTo(this); + } + } + } + } + + return this; + } + + /** Temporary, just for peaking */ + @Deprecated(forRemoval = true) + public void /*RailState*/ place(){ + boolean pPowered = false, pPlaceBlock = false, canMakeSlopes = false; + RailShape pShape = null; + // Above would be the method args + //------------------------------------------------------------------------- + + BlockPos posNorth = this.pos.north(); + BlockPos posSouth = this.pos.south(); + BlockPos posWest = this.pos.west(); + BlockPos posEast = this.pos.east(); + boolean hasNorth = this.hasNeighborBus(posNorth); + boolean hasSouth = this.hasNeighborBus(posSouth); + boolean hasWest = this.hasNeighborBus(posWest); + boolean hasEast = this.hasNeighborBus(posEast); + boolean ns = hasNorth || hasSouth; + boolean ew = hasWest || hasEast; + + RailShape railshape = null; + + if(ns && !ew){ + railshape = RailShape.NORTH_SOUTH; + } + + if(ew && !ns){ + railshape = RailShape.EAST_WEST; + } + + boolean se = hasSouth && hasEast; + boolean sw = hasSouth && hasWest; + boolean ne = hasNorth && hasEast; + boolean nw = hasNorth && hasWest; + if(!this.isStraight){ + if(se && !hasNorth && !hasWest){ + railshape = RailShape.SOUTH_EAST; + } + + if(sw && !hasNorth && !hasEast){ + railshape = RailShape.SOUTH_WEST; + } + + if(nw && !hasSouth && !hasEast){ + railshape = RailShape.NORTH_WEST; + } + + if(ne && !hasSouth && !hasWest){ + railshape = RailShape.NORTH_EAST; + } + } + + if(railshape == null){ + if(ns && ew){ + railshape = pShape; + }else if(ns){ + railshape = RailShape.NORTH_SOUTH; + }else if(ew){ + railshape = RailShape.EAST_WEST; + } + + if(!this.isStraight){ + if(pPowered){ + if(se){ + railshape = RailShape.SOUTH_EAST; + } + + if(sw){ + railshape = RailShape.SOUTH_WEST; + } + + if(ne){ + railshape = RailShape.NORTH_EAST; + } + + if(nw){ + railshape = RailShape.NORTH_WEST; + } + }else{ + if(nw){ + railshape = RailShape.NORTH_WEST; + } + + if(ne){ + railshape = RailShape.NORTH_EAST; + } + + if(sw){ + railshape = RailShape.SOUTH_WEST; + } + + if(se){ + railshape = RailShape.SOUTH_EAST; + } + } + } + } + + if(railshape == RailShape.NORTH_SOUTH && canMakeSlopes){ + if(BaseRailBlock.isRail(this.level, posNorth.above())){ + railshape = RailShape.ASCENDING_NORTH; + } + + if(BaseRailBlock.isRail(this.level, posSouth.above())){ + railshape = RailShape.ASCENDING_SOUTH; + } + } + + if(railshape == RailShape.EAST_WEST && canMakeSlopes){ + if(BaseRailBlock.isRail(this.level, posEast.above())){ + railshape = RailShape.ASCENDING_EAST; + } + + if(BaseRailBlock.isRail(this.level, posWest.above())){ + railshape = RailShape.ASCENDING_WEST; + } + } + + if(railshape == null){ + railshape = pShape; + } + + //updateConnections(railshape); + this.state = this.state.setValue(RailBlock.SHAPE, railshape); + if(pPlaceBlock || this.level.getBlockState(this.pos) != this.state){ + this.level.setBlock(this.pos, this.state, 3); + + for(int i = 0;i < this.connections.size();++i){ + BusbarState busState = getBus(this.connections.get(i)); + if(busState != null){ + busState.removeSoftConnections(); + if(busState.canConnectTo(this)){ + busState.connectTo(this); + } + } + } + } + + //return this; + } + + private void connectTo(BusbarState state){ + this.connections.add(state.pos); + + BlockPos posDown = this.pos.below(); + BlockPos posUp = this.pos.above(); + BlockPos posNorth = this.pos.north(); + BlockPos posEast = this.pos.east(); + BlockPos posSouth = this.pos.south(); + BlockPos posWest = this.pos.west(); + + boolean conDown = hasConnection(posDown); + boolean conUp = hasConnection(posUp); + boolean conNorth = hasConnection(posNorth); + boolean conSouth = hasConnection(posSouth); + boolean conWest = hasConnection(posWest); + boolean conEast = hasConnection(posEast); + + EnumBusbarShape shape = null; + + if(conNorth || conSouth){ + shape = EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH; + } + if(conEast || conWest){ + shape = EnumBusbarShape.INSULATORS_DOWN_EAST_WEST; + } + + if(!this.isStraight){ + if(conSouth && conEast && !conNorth && !conWest){ + shape = EnumBusbarShape.BEND_DOWN_EAST_SOUTH; + } + + if(conSouth && conWest && !conNorth && !conEast){ + shape = EnumBusbarShape.BEND_DOWN_SOUTH_WEST; + } + + if(conNorth && conWest && !conSouth && !conEast){ + shape = EnumBusbarShape.BEND_DOWN_WEST_NORTH; + } + + if(conNorth && conEast && !conSouth && !conWest){ + shape = EnumBusbarShape.BEND_DOWN_NORTH_EAST; + } + } + + if(shape == null){ + shape = EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH; + } + + OverEngineered.log.debug( + "DEBUG\r\nconnectTo(\r\n\t" + + "Level: {}\r\n\t" + + "BlockState: {}\r\n\t" + + "Pos: {}\r\n\t" + + "Connections: {}\r\n)"+ + "{\r\n\t" + + "Level: {}\r\n\t" + + "State: {}\r\n\t" + + "Pos: {}\r\n\t" + + "Connections: {}\r\n\t" + + "Shape: {}\r\n" + + "}", + state.level, + state.state, + state.pos, + state.connections, + + this.level, + this.state, + this.pos, + this.connections, + shape + ); + + this.state = this.state.setValue(BusbarBlock.SHAPE, shape); + this.level.setBlock(this.pos, this.state, 3); + } + + /** Temporary, just for peaking */ + @SuppressWarnings({"null", "unused"}) + @Deprecated(forRemoval = true) + private void connectTo(){ + BusbarState pState = null; + // Above would be the method args + //------------------------------------------------------------------------- + + this.connections.add(pState.pos); + BlockPos posNorth = this.pos.north(); + BlockPos posSouth = this.pos.south(); + BlockPos posWest = this.pos.west(); + BlockPos posEast = this.pos.east(); + boolean conNorth = hasConnection(posNorth); + boolean conSouth = hasConnection(posSouth); + boolean conWest = hasConnection(posWest); + boolean conEast = hasConnection(posEast); + RailShape shape = null; + if(conNorth || conSouth){ + shape = RailShape.NORTH_SOUTH; + } + + if(conWest || conEast){ + shape = RailShape.EAST_WEST; + } + + if(!this.isStraight){ + if(conSouth && conEast && !conNorth && !conWest){ + shape = RailShape.SOUTH_EAST; + } + + if(conSouth && conWest && !conNorth && !conEast){ + shape = RailShape.SOUTH_WEST; + } + + if(conNorth && conWest && !conSouth && !conEast){ + shape = RailShape.NORTH_WEST; + } + + if(conNorth && conEast && !conSouth && !conWest){ + shape = RailShape.NORTH_EAST; + } + } + + /* + if(railshape == RailShape.NORTH_SOUTH && canMakeSlopes){ + if(BaseRailBlock.isRail(this.level, blockpos.above())){ + railshape = RailShape.ASCENDING_NORTH; + } + + if(BaseRailBlock.isRail(this.level, blockpos1.above())){ + railshape = RailShape.ASCENDING_SOUTH; + } + } + + if(railshape == RailShape.EAST_WEST && canMakeSlopes){ + if(BaseRailBlock.isRail(this.level, blockpos3.above())){ + railshape = RailShape.ASCENDING_EAST; + } + + if(BaseRailBlock.isRail(this.level, blockpos2.above())){ + railshape = RailShape.ASCENDING_WEST; + } + } + */ + + if(shape == null){ + shape = RailShape.NORTH_SOUTH; + } + +// this.state = this.state.setValue(BusbarBlock.SHAPE, railshape); +// this.level.setBlock(this.pos, this.state, 3); + } + + private void removeSoftConnections(){ + for(int i = 0;i < this.connections.size();i++){ + BusbarState busState = getBus(this.connections.get(i)); + if(busState != null && busState.connectsTo(this)){ + this.connections.set(i, busState.pos); + }else{ + this.connections.remove(i--); + } + } + } + + private void updateConnections(EnumBusbarShape shape){ + this.connections.clear(); + shape.connectionOffsets(this.connections, this.pos); + } +} diff --git a/src/main/java/twistedgate/overengineered/common/blocks/tileentity/BusbarTileEntity.java b/src/main/java/twistedgate/overengineered/common/blocks/tileentity/BusbarTileEntity.java new file mode 100644 index 0000000..f6b529a --- /dev/null +++ b/src/main/java/twistedgate/overengineered/common/blocks/tileentity/BusbarTileEntity.java @@ -0,0 +1,30 @@ +package twistedgate.overengineered.common.blocks.tileentity; + +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.level.block.state.BlockState; +import twistedgate.overengineered.common.OETileTypes; +import twistedgate.overengineered.common.blocks.ticking.OEClientTickableTile; +import twistedgate.overengineered.common.blocks.ticking.OEServerTickableTile; + +public class BusbarTileEntity extends OETileEntityBase implements OEServerTickableTile, OEClientTickableTile{ + public BusbarTileEntity(BlockPos pWorldPosition, BlockState pBlockState){ + super(OETileTypes.BUS.get(), pWorldPosition, pBlockState); + } + + @Override + protected void writeCustom(CompoundTag compound){ + } + + @Override + protected void readCustom(CompoundTag compound){ + } + + @Override + public void tickClient(){ + } + + @Override + public void tickServer(){ + } +} diff --git a/src/main/java/twistedgate/overengineered/common/blocks/tileentity/OETileEntityBase.java b/src/main/java/twistedgate/overengineered/common/blocks/tileentity/OETileEntityBase.java new file mode 100644 index 0000000..ba87a05 --- /dev/null +++ b/src/main/java/twistedgate/overengineered/common/blocks/tileentity/OETileEntityBase.java @@ -0,0 +1,64 @@ +package twistedgate.overengineered.common.blocks.tileentity; + +import java.util.Objects; + +import javax.annotation.Nonnull; + +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.Connection; +import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; + +public abstract class OETileEntityBase extends BlockEntity{ + public OETileEntityBase(BlockEntityType pType, BlockPos pWorldPosition, BlockState pBlockState){ + super(pType, pWorldPosition, pBlockState); + } + + @Nonnull + public Level getWorldNonnull(){ + return Objects.requireNonNull(super.getLevel()); + } + + @Override + public ClientboundBlockEntityDataPacket getUpdatePacket(){ + return ClientboundBlockEntityDataPacket.create(this, b -> getUpdateTag()); + } + + @Override + public void handleUpdateTag(CompoundTag tag){ + load(tag); + } + + @Override + @Nonnull + public CompoundTag getUpdateTag(){ + CompoundTag nbt = new CompoundTag(); + saveAdditional(nbt); + return nbt; + } + + @Override + public void onDataPacket(Connection net, ClientboundBlockEntityDataPacket pkt){ + if(pkt.getTag() != null) + load(pkt.getTag()); + } + + @Override + public void saveAdditional(@Nonnull CompoundTag compound){ + writeCustom(compound); + } + + @Override + public void load(@Nonnull CompoundTag compound){ + super.load(compound); + readCustom(compound); + } + + protected abstract void writeCustom(CompoundTag compound); + + protected abstract void readCustom(CompoundTag compound); +} diff --git a/src/main/java/twistedgate/overengineered/utils/ExternalModContent.java b/src/main/java/twistedgate/overengineered/utils/ExternalModContent.java new file mode 100644 index 0000000..1329926 --- /dev/null +++ b/src/main/java/twistedgate/overengineered/utils/ExternalModContent.java @@ -0,0 +1,39 @@ +package twistedgate.overengineered.utils; + +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +public class ExternalModContent{ + public static final RegistryObject IE_ITEM_HAMMER = RegistryObject.create(ResourceUtils.ie("hammer"), ForgeRegistries.ITEMS); + public static final RegistryObject IE_ITEM_WIRECUTTER = RegistryObject.create(ResourceUtils.ie("wirecutter"), ForgeRegistries.ITEMS); + public static final RegistryObject IE_ITEM_SCREWDRIVER = RegistryObject.create(ResourceUtils.ie("screwdriver"), ForgeRegistries.ITEMS); + + public static void init(){ + } + + public static boolean isIEHammer(ItemStack stack){ + return isIEHammer(stack.getItem()); + } + + public static boolean isIEHammer(Item item){ + return item.equals(IE_ITEM_HAMMER.get()); + } + + public static boolean isIEScrewdriver(ItemStack stack){ + return isIEHammer(stack.getItem()); + } + + public static boolean isIEScrewdriver(Item item){ + return item.equals(IE_ITEM_SCREWDRIVER.get()); + } + + public static boolean isIEWirecutter(ItemStack stack){ + return isIEHammer(stack.getItem()); + } + + public static boolean isIEWirecutter(Item item){ + return item.equals(IE_ITEM_WIRECUTTER.get()); + } +} \ No newline at end of file diff --git a/src/main/java/twistedgate/overengineered/utils/enums/EnumBusbarShape.java b/src/main/java/twistedgate/overengineered/utils/enums/EnumBusbarShape.java new file mode 100644 index 0000000..119ffa3 --- /dev/null +++ b/src/main/java/twistedgate/overengineered/utils/enums/EnumBusbarShape.java @@ -0,0 +1,299 @@ +package twistedgate.overengineered.utils.enums; + +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Set; +import java.util.function.BiConsumer; +import java.util.stream.Stream; + +import com.google.common.collect.Iterators; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.util.StringRepresentable; + +/** + * @author TwistedGate + */ +public enum EnumBusbarShape implements StringRepresentable{ + // @formatter:off + // Straights with Insulators (FACING_FROM_TO) + INSULATORS_DOWN_NORTH_SOUTH(ConnectionsPoints.NORTH_SOUTH), + INSULATORS_DOWN_EAST_WEST(ConnectionsPoints.EAST_WEST), + INSULATORS_UP_NORTH_SOUTH(ConnectionsPoints.NORTH_SOUTH), + INSULATORS_UP_EAST_WEST(ConnectionsPoints.EAST_WEST), + + INSULATORS_NORTH_UP_DOWN(ConnectionsPoints.UP_DOWN), + INSULATORS_EAST_UP_DOWN(ConnectionsPoints.UP_DOWN), + INSULATORS_SOUTH_UP_DOWN(ConnectionsPoints.UP_DOWN), + INSULATORS_WEST_UP_DOWN(ConnectionsPoints.UP_DOWN), + INSULATORS_NORTH_EAST_WEST(ConnectionsPoints.EAST_WEST), + INSULATORS_EAST_NORTH_SOUTH(ConnectionsPoints.NORTH_SOUTH), + INSULATORS_SOUTH_EAST_WEST(ConnectionsPoints.EAST_WEST), + INSULATORS_WEST_NORTH_SOUTH(ConnectionsPoints.NORTH_SOUTH), + + // Straights without Insulators (FACING_FROM_TO) + FLOATING_DOWN_NORTH_SOUTH(ConnectionsPoints.NORTH_SOUTH), + FLOATING_DOWN_EAST_WEST(ConnectionsPoints.EAST_WEST), + FLOATING_UP_NORTH_SOUTH(ConnectionsPoints.NORTH_SOUTH), + FLOATING_UP_EAST_WEST(ConnectionsPoints.EAST_WEST), + + FLOATING_NORTH_UP_DOWN(ConnectionsPoints.UP_DOWN), + FLOATING_EAST_UP_DOWN(ConnectionsPoints.UP_DOWN), + FLOATING_SOUTH_UP_DOWN(ConnectionsPoints.UP_DOWN), + FLOATING_WEST_UP_DOWN(ConnectionsPoints.UP_DOWN), + FLOATING_NORTH_EAST_WEST(ConnectionsPoints.EAST_WEST), + FLOATING_EAST_NORTH_SOUTH(ConnectionsPoints.NORTH_SOUTH), + FLOATING_SOUTH_EAST_WEST(ConnectionsPoints.EAST_WEST), + FLOATING_WEST_NORTH_SOUTH(ConnectionsPoints.NORTH_SOUTH), + + // 90° Bends (FACING_FROM_TO) + BEND_DOWN_NORTH_EAST(ConnectionsPoints.NORTH_EAST), + BEND_DOWN_EAST_SOUTH(ConnectionsPoints.EAST_SOUTH), + BEND_DOWN_SOUTH_WEST(ConnectionsPoints.SOUTH_WEST), + BEND_DOWN_WEST_NORTH(ConnectionsPoints.WEST_NORTH), + + BEND_UP_NORTH_EAST(ConnectionsPoints.NORTH_EAST), + BEND_UP_EAST_SOUTH(ConnectionsPoints.EAST_SOUTH), + BEND_UP_SOUTH_WEST(ConnectionsPoints.SOUTH_WEST), + BEND_UP_WEST_NORTH(ConnectionsPoints.WEST_NORTH), + + BEND_NORTH_DOWN_EAST(ConnectionsPoints.DOWN_EAST), + BEND_NORTH_EAST_UP(ConnectionsPoints.UP_EAST), + BEND_NORTH_UP_WEST(ConnectionsPoints.UP_WEST), + BEND_NORTH_WEST_DOWN(ConnectionsPoints.DOWN_WEST), + + BEND_EAST_DOWN_SOUTH(ConnectionsPoints.DOWN_SOUTH), + BEND_EAST_SOUTH_UP(ConnectionsPoints.UP_SOUTH), + BEND_EAST_UP_NORTH(ConnectionsPoints.UP_NORTH), + BEND_EAST_NORTH_DOWN(ConnectionsPoints.DOWN_NORTH), + + BEND_SOUTH_DOWN_WEST(ConnectionsPoints.DOWN_WEST), + BEND_SOUTH_WEST_UP(ConnectionsPoints.UP_WEST), + BEND_SOUTH_UP_EAST(ConnectionsPoints.UP_EAST), + BEND_SOUTH_EAST_DOWN(ConnectionsPoints.DOWN_EAST), + + BEND_WEST_DOWN_NORTH(ConnectionsPoints.DOWN_NORTH), + BEND_WEST_NORTH_UP(ConnectionsPoints.UP_NORTH), + BEND_WEST_UP_SOUTH(ConnectionsPoints.UP_SOUTH), + BEND_WEST_SOUTH_DOWN(ConnectionsPoints.DOWN_SOUTH), + + // Inside Edges (SIDE_FACING_FROM_TO) + EDGE_INSIDE_DOWN_NORTH_UP_SOUTH(ConnectionsPoints.UP_SOUTH), + EDGE_INSIDE_DOWN_EAST_UP_WEST(ConnectionsPoints.UP_WEST), + EDGE_INSIDE_DOWN_SOUTH_UP_NORTH(ConnectionsPoints.UP_NORTH), + EDGE_INSIDE_DOWN_WEST_UP_EAST(ConnectionsPoints.UP_EAST), + EDGE_INSIDE_UP_NORTH_DOWN_SOUTH(ConnectionsPoints.DOWN_SOUTH), + EDGE_INSIDE_UP_EAST_DOWN_WEST(ConnectionsPoints.DOWN_WEST), + EDGE_INSIDE_UP_SOUTH_DOWN_NORTH(ConnectionsPoints.DOWN_NORTH), + EDGE_INSIDE_UP_WEST_DOWN_EAST(ConnectionsPoints.DOWN_EAST), + + // Outside Edges (SIDE_FACING_FROM_TO) + EDGE_OUTSIDE_DOWN_NORTH_UP_SOUTH(ConnectionsPoints.UP_SOUTH), + EDGE_OUTSIDE_DOWN_EAST_UP_WEST(ConnectionsPoints.UP_WEST), + EDGE_OUTSIDE_DOWN_SOUTH_UP_NORTH(ConnectionsPoints.UP_NORTH), + EDGE_OUTSIDE_DOWN_WEST_UP_EAST(ConnectionsPoints.UP_EAST), + EDGE_OUTSIDE_UP_NORTH_DOWN_SOUTH(ConnectionsPoints.DOWN_SOUTH), + EDGE_OUTSIDE_UP_EAST_DOWN_WEST(ConnectionsPoints.DOWN_WEST), + EDGE_OUTSIDE_UP_SOUTH_DOWN_NORTH(ConnectionsPoints.DOWN_NORTH), + EDGE_OUTSIDE_UP_WEST_DOWN_EAST(ConnectionsPoints.DOWN_EAST), + ; + // @formatter:on + + private final String serialname; + private final Direction[] points; + private EnumBusbarShape(Direction... points){ + this.serialname = name().toLowerCase(); + this.points = points; + } + private EnumBusbarShape(String name, Direction... points){ + this.serialname = name; + this.points = points; + } + + public void connectionOffsets(final List list, BlockPos pos){ + for(Direction p:this.points){ + list.add(pos.relative(p)); + } + } + + @Override + public String getSerializedName(){ + return this.serialname; + } + + public static class ConnectionsPoints{ + private static final Direction[] NORTH_SOUTH = {Direction.NORTH, Direction.SOUTH}; + private static final Direction[] EAST_WEST = {Direction.EAST, Direction.WEST}; + private static final Direction[] UP_DOWN = {Direction.UP, Direction.DOWN}; + + private static final Direction[] NORTH_EAST = {Direction.NORTH, Direction.EAST}; + private static final Direction[] EAST_SOUTH = {Direction.EAST, Direction.SOUTH}; + private static final Direction[] SOUTH_WEST = {Direction.SOUTH, Direction.WEST}; + private static final Direction[] WEST_NORTH = {Direction.WEST, Direction.NORTH}; + + private static final Direction[] UP_NORTH = {Direction.UP, Direction.NORTH}; + private static final Direction[] UP_EAST = {Direction.UP, Direction.EAST}; + private static final Direction[] UP_SOUTH = {Direction.UP, Direction.SOUTH}; + private static final Direction[] UP_WEST = {Direction.UP, Direction.WEST}; + + private static final Direction[] DOWN_NORTH = {Direction.DOWN, Direction.NORTH}; + private static final Direction[] DOWN_EAST = {Direction.DOWN, Direction.EAST}; + private static final Direction[] DOWN_SOUTH = {Direction.DOWN, Direction.SOUTH}; + private static final Direction[] DOWN_WEST = {Direction.DOWN, Direction.WEST}; + } + + public static enum Type implements Iterable{ + // @formatter:off + STRAIGHT_INSULATORS_FLOOR(INSULATORS_DOWN_NORTH_SOUTH, INSULATORS_DOWN_EAST_WEST), + STRAIGHT_INSULATORS_CEILING(INSULATORS_UP_NORTH_SOUTH, INSULATORS_UP_EAST_WEST), + STRAIGHT_INSULATORS_WALL_NORMAL( + INSULATORS_NORTH_UP_DOWN, + INSULATORS_EAST_UP_DOWN, + INSULATORS_SOUTH_UP_DOWN, + INSULATORS_WEST_UP_DOWN + ), + STRAIGHT_INSULATORS_WALL_ROTATED( + INSULATORS_NORTH_EAST_WEST, + INSULATORS_EAST_NORTH_SOUTH, + INSULATORS_SOUTH_EAST_WEST, + INSULATORS_WEST_NORTH_SOUTH + ), + + STRAIGHT_FLOATING_FLOOR(FLOATING_DOWN_NORTH_SOUTH, FLOATING_DOWN_EAST_WEST), + STRAIGHT_FLOATING_CEILING(FLOATING_UP_NORTH_SOUTH, FLOATING_UP_EAST_WEST), + STRAIGHT_FLOATING_WALL_NORMAL( + FLOATING_NORTH_UP_DOWN, + FLOATING_EAST_UP_DOWN, + FLOATING_SOUTH_UP_DOWN, + FLOATING_WEST_UP_DOWN + ), + STRAIGHT_FLOATING_WALL_ROTATED( + FLOATING_NORTH_EAST_WEST, + FLOATING_EAST_NORTH_SOUTH, + FLOATING_SOUTH_EAST_WEST, + FLOATING_WEST_NORTH_SOUTH + ), + + BENDS_FLOOR( + BEND_DOWN_NORTH_EAST, + BEND_DOWN_EAST_SOUTH, + BEND_DOWN_SOUTH_WEST, + BEND_DOWN_WEST_NORTH + ), + BENDS_CEILING( + BEND_UP_NORTH_EAST, + BEND_UP_EAST_SOUTH, + BEND_UP_SOUTH_WEST, + BEND_UP_WEST_NORTH + ), + BENDS_WALLS( + BEND_NORTH_DOWN_EAST, BEND_NORTH_EAST_UP, BEND_NORTH_UP_WEST, BEND_NORTH_WEST_DOWN, + BEND_EAST_DOWN_SOUTH, BEND_EAST_SOUTH_UP, BEND_EAST_UP_NORTH, BEND_EAST_NORTH_DOWN, + BEND_SOUTH_DOWN_WEST, BEND_SOUTH_WEST_UP, BEND_SOUTH_UP_EAST, BEND_SOUTH_EAST_DOWN, + BEND_WEST_DOWN_NORTH, BEND_WEST_NORTH_UP, BEND_WEST_UP_SOUTH, BEND_WEST_SOUTH_DOWN + ), + BENDS_WALL_NORTH(BEND_NORTH_DOWN_EAST, BEND_NORTH_EAST_UP, BEND_NORTH_UP_WEST, BEND_NORTH_WEST_DOWN), + BENDS_WALL_EAST(BEND_EAST_DOWN_SOUTH, BEND_EAST_SOUTH_UP, BEND_EAST_UP_NORTH, BEND_EAST_NORTH_DOWN), + BENDS_WALL_SOUTH(BEND_SOUTH_DOWN_WEST, BEND_SOUTH_WEST_UP, BEND_SOUTH_UP_EAST, BEND_SOUTH_EAST_DOWN), + BENDS_WALL_WEST(BEND_WEST_DOWN_NORTH, BEND_WEST_NORTH_UP, BEND_WEST_UP_SOUTH, BEND_WEST_SOUTH_DOWN), + + EDGE_INSIDE_FLOOR( + EDGE_INSIDE_DOWN_SOUTH_UP_NORTH, + EDGE_INSIDE_DOWN_WEST_UP_EAST, + EDGE_INSIDE_DOWN_NORTH_UP_SOUTH, + EDGE_INSIDE_DOWN_EAST_UP_WEST + ), + EDGE_INSIDE_CEILING( + EDGE_INSIDE_UP_NORTH_DOWN_SOUTH, + EDGE_INSIDE_UP_EAST_DOWN_WEST, + EDGE_INSIDE_UP_SOUTH_DOWN_NORTH, + EDGE_INSIDE_UP_WEST_DOWN_EAST + ), + EDGE_OUTSIDE_FLOOR( + EDGE_OUTSIDE_DOWN_NORTH_UP_SOUTH, + EDGE_OUTSIDE_DOWN_EAST_UP_WEST, + EDGE_OUTSIDE_DOWN_SOUTH_UP_NORTH, + EDGE_OUTSIDE_DOWN_WEST_UP_EAST + ), + EDGE_OUTSIDE_CEILING( + EDGE_OUTSIDE_UP_NORTH_DOWN_SOUTH, + EDGE_OUTSIDE_UP_EAST_DOWN_WEST, + EDGE_OUTSIDE_UP_SOUTH_DOWN_NORTH, + EDGE_OUTSIDE_UP_WEST_DOWN_EAST + ) + ; + // @formatter:on + public static final Set STRAIGHT_SEGMENTS; + public static final Set BEND_SEGMENTS; + public static final Set EDGE_SEGMENTS; + static{ + { + HashSet list = new HashSet<>(); + + list.addAll(Arrays.asList(STRAIGHT_INSULATORS_FLOOR.shapes)); + list.addAll(Arrays.asList(STRAIGHT_INSULATORS_CEILING.shapes)); + list.addAll(Arrays.asList(STRAIGHT_INSULATORS_WALL_NORMAL.shapes)); + list.addAll(Arrays.asList(STRAIGHT_INSULATORS_WALL_ROTATED.shapes)); + + list.addAll(Arrays.asList(STRAIGHT_FLOATING_FLOOR.shapes)); + list.addAll(Arrays.asList(STRAIGHT_FLOATING_CEILING.shapes)); + list.addAll(Arrays.asList(STRAIGHT_FLOATING_WALL_NORMAL.shapes)); + list.addAll(Arrays.asList(STRAIGHT_FLOATING_WALL_ROTATED.shapes)); + + STRAIGHT_SEGMENTS = Collections.unmodifiableSet(list); + } + { + HashSet list = new HashSet<>(); + + list.addAll(Arrays.asList(BENDS_FLOOR.shapes)); + list.addAll(Arrays.asList(BENDS_CEILING.shapes)); + list.addAll(Arrays.asList(BENDS_WALLS.shapes)); + + BEND_SEGMENTS = Collections.unmodifiableSet(list); + } + { + HashSet list = new HashSet<>(); + + list.addAll(Arrays.asList(EDGE_INSIDE_FLOOR.shapes)); + list.addAll(Arrays.asList(EDGE_INSIDE_CEILING.shapes)); + list.addAll(Arrays.asList(EDGE_OUTSIDE_FLOOR.shapes)); + list.addAll(Arrays.asList(EDGE_OUTSIDE_CEILING.shapes)); + + EDGE_SEGMENTS = Collections.unmodifiableSet(list); + } + } + + private final EnumBusbarShape[] shapes; + private Type(EnumBusbarShape... shapes){ + this.shapes = shapes; + } + + public void forEachIndexed(BiConsumer consumer){ + for(int i = 0;i < this.shapes.length;i++){ + consumer.accept(i, shapes[i]); + } + } + + public boolean contains(EnumBusbarShape shape){ + for(int i = 0;i < this.shapes.length;i++){ + if(this.shapes[i] == shape){ + return true; + } + } + return false; + } + + @Override + public Iterator iterator(){ + return Iterators.forArray(this.shapes); + } + + public Stream stream(){ + return Arrays.stream(this.shapes); + } + } +} diff --git a/src/main/resources/assets/overengineered/lang/en_us.json b/src/main/resources/assets/overengineered/lang/en_us.json index 7a73a41..cdff664 100644 --- a/src/main/resources/assets/overengineered/lang/en_us.json +++ b/src/main/resources/assets/overengineered/lang/en_us.json @@ -1,2 +1,5 @@ { + "itemGroup.overengineered": "Over Engineered", + + "block.overengineered.busbar": "Busbar" } \ No newline at end of file diff --git a/src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_a.obj b/src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_a.obj new file mode 100644 index 0000000..ad3b48b --- /dev/null +++ b/src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_a.obj @@ -0,0 +1,351 @@ +# Blender v2.79 (sub 0) OBJ File: 'busbar.blend' +# www.blender.org +mtllib busmaterial.mtl +o busbar_isolators +v 0.562500 0.062500 0.562500 +v 0.531250 0.125000 0.531250 +v 0.562500 0.062500 0.437500 +v 0.531250 0.125000 0.468750 +v 0.437500 0.062500 0.437500 +v 0.468750 0.125000 0.468750 +v 0.468750 0.125000 0.531250 +v 0.437500 0.062500 0.562500 +v 0.531250 0.187500 0.468750 +v 0.562500 0.000000 0.437500 +v 0.531250 0.187500 0.531250 +v 0.562500 0.000000 0.562500 +v 0.468750 0.187500 0.468750 +v 0.437500 0.000000 0.437500 +v 0.468750 0.187500 0.531250 +v 0.437500 0.000000 0.562500 +v 0.125000 0.000000 0.562500 +v 0.156250 0.187500 0.531250 +v 0.125000 0.000000 0.437500 +v 0.156250 0.187500 0.468750 +v 0.250000 0.000000 0.562500 +v 0.218750 0.187500 0.531250 +v 0.250000 0.000000 0.437500 +v 0.218750 0.187500 0.468750 +v 0.125000 0.062500 0.562500 +v 0.156250 0.125000 0.531250 +v 0.156250 0.125000 0.468750 +v 0.125000 0.062500 0.437500 +v 0.218750 0.125000 0.468750 +v 0.250000 0.062500 0.437500 +v 0.218750 0.125000 0.531250 +v 0.250000 0.062500 0.562500 +v 0.875000 0.062500 0.562500 +v 0.843750 0.125000 0.531250 +v 0.875000 0.062500 0.437500 +v 0.843750 0.125000 0.468750 +v 0.750000 0.062500 0.437500 +v 0.781250 0.125000 0.468750 +v 0.781250 0.125000 0.531250 +v 0.750000 0.062500 0.562500 +v 0.843750 0.187500 0.468750 +v 0.875000 0.000000 0.437500 +v 0.843750 0.187500 0.531250 +v 0.875000 0.000000 0.562500 +v 0.781250 0.187500 0.468750 +v 0.750000 0.000000 0.437500 +v 0.781250 0.187500 0.531250 +v 0.750000 0.000000 0.562500 +vt 0.125000 0.062500 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.000000 0.062500 +vt 0.125000 0.062500 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.000000 0.062500 +vt 0.125000 0.000000 +vt 0.000000 0.000000 +vt 0.125000 0.000000 +vt 0.000000 0.000000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.312500 +vt 0.000000 0.312500 +vt 0.000000 0.187500 +vt 0.125000 0.187500 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.312500 +vt 0.000000 0.312500 +vt 0.000000 0.187500 +vt 0.125000 0.187500 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.062500 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.000000 0.062500 +vt 0.125000 0.062500 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.000000 0.062500 +vt 0.125000 0.000000 +vt 0.000000 0.000000 +vt 0.125000 0.000000 +vt 0.000000 0.000000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.312500 +vt 0.000000 0.312500 +vt 0.000000 0.187500 +vt 0.125000 0.187500 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vn 0.8944 0.4472 0.0000 +vn 0.0000 0.4472 0.8944 +vn 0.0000 0.0000 1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.4472 -0.8944 +vn -0.8944 0.4472 0.0000 +usemtl None +s off +f 3/1/1 4/2/1 2/3/1 1/4/1 +f 1/5/2 2/6/2 7/7/2 8/8/2 +f 12/9/3 1/5/3 8/8/3 16/10/3 +f 10/11/4 3/1/4 1/4/4 12/12/4 +f 14/13/5 5/14/5 3/15/5 10/16/5 +f 2/17/3 11/18/3 15/19/3 7/20/3 +f 6/21/5 13/22/5 9/23/5 4/24/5 +f 7/25/6 15/26/6 13/27/6 6/28/6 +f 4/29/4 9/30/4 11/31/4 2/32/4 +f 14/33/7 10/34/7 12/35/7 16/36/7 +f 26/37/6 18/38/6 20/39/6 27/40/6 +f 27/41/5 20/42/5 24/43/5 29/44/5 +f 29/45/4 24/46/4 22/47/4 31/48/4 +f 31/49/3 22/50/3 18/51/3 26/52/3 +f 19/53/7 23/54/7 21/55/7 17/56/7 +f 21/57/3 32/58/3 25/59/3 17/60/3 +f 32/58/2 31/61/2 26/62/2 25/59/2 +f 23/63/4 30/64/4 32/65/4 21/66/4 +f 30/64/1 29/67/1 31/68/1 32/65/1 +f 19/69/5 28/70/5 30/71/5 23/72/5 +f 28/70/8 27/73/8 29/74/8 30/71/8 +f 17/75/6 25/76/6 28/77/6 19/78/6 +f 25/76/9 26/79/9 27/80/9 28/77/9 +f 5/14/8 6/81/8 4/82/8 3/15/8 +f 16/83/6 8/84/6 5/85/6 14/86/6 +f 8/84/9 7/87/9 6/88/9 5/85/9 +f 35/89/1 36/90/1 34/91/1 33/92/1 +f 33/93/2 34/94/2 39/95/2 40/96/2 +f 44/97/3 33/93/3 40/96/3 48/98/3 +f 42/99/4 35/89/4 33/92/4 44/100/4 +f 46/101/5 37/102/5 35/103/5 42/104/5 +f 34/105/3 43/106/3 47/107/3 39/108/3 +f 38/109/5 45/110/5 41/111/5 36/112/5 +f 39/113/6 47/114/6 45/115/6 38/116/6 +f 36/117/4 41/118/4 43/119/4 34/120/4 +f 46/121/7 42/122/7 44/123/7 48/124/7 +f 37/102/8 38/125/8 36/126/8 35/103/8 +f 48/127/6 40/128/6 37/129/6 46/130/6 +f 40/128/9 39/131/9 38/132/9 37/129/9 +o busbar +v 0.437500 0.187500 1.000000 +v 0.437500 0.250000 1.000000 +v 0.437500 0.187500 0.000000 +v 0.437500 0.250000 0.000000 +v 0.562500 0.187500 1.000000 +v 0.562500 0.250000 1.000000 +v 0.562500 0.187500 0.000000 +v 0.562500 0.250000 0.000000 +v 0.125000 0.187500 1.000000 +v 0.125000 0.250000 1.000000 +v 0.125000 0.187500 0.000000 +v 0.125000 0.250000 0.000000 +v 0.250000 0.187500 1.000000 +v 0.250000 0.250000 1.000000 +v 0.250000 0.187500 0.000000 +v 0.250000 0.250000 0.000000 +v 0.750000 0.187500 1.000000 +v 0.750000 0.250000 1.000000 +v 0.750000 0.187500 0.000000 +v 0.750000 0.250000 0.000000 +v 0.875000 0.187500 1.000000 +v 0.875000 0.250000 1.000000 +v 0.875000 0.187500 0.000000 +v 0.875000 0.250000 0.000000 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.312500 0.875000 +vt 0.312500 0.812500 +vt 0.687500 0.812500 +vt 0.687500 0.875000 +vt 0.562500 0.875000 +vt 0.562500 0.812500 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.312500 0.875000 +vt 0.312500 0.812500 +vt 0.687500 0.812500 +vt 0.687500 0.875000 +vt 0.562500 0.875000 +vt 0.562500 0.812500 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.312500 0.875000 +vt 0.312500 0.812500 +vt 0.687500 0.812500 +vt 0.687500 0.875000 +vt 0.562500 0.875000 +vt 0.562500 0.812500 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 -1.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +usemtl None +s off +f 51/133/10 52/134/10 56/135/10 55/136/10 +f 53/137/11 54/138/11 50/139/11 49/140/11 +f 53/141/12 49/142/12 51/143/12 55/144/12 +f 51/145/13 49/146/13 50/147/13 52/148/13 +f 53/149/14 55/150/14 56/151/14 54/152/14 +f 56/151/15 52/153/15 50/154/15 54/152/15 +f 59/155/10 60/156/10 64/157/10 63/158/10 +f 61/159/11 62/160/11 58/161/11 57/162/11 +f 61/163/12 57/164/12 59/165/12 63/166/12 +f 59/167/13 57/168/13 58/169/13 60/170/13 +f 61/171/14 63/172/14 64/173/14 62/174/14 +f 64/173/15 60/175/15 58/176/15 62/174/15 +f 67/177/10 68/178/10 72/179/10 71/180/10 +f 69/181/11 70/182/11 66/183/11 65/184/11 +f 69/185/12 65/186/12 67/187/12 71/188/12 +f 67/189/13 65/190/13 66/191/13 68/192/13 +f 69/193/14 71/194/14 72/195/14 70/196/14 +f 72/195/15 68/197/15 66/198/15 70/196/15 diff --git a/src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_a_alt.obj b/src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_a_alt.obj new file mode 100644 index 0000000..1caeb04 --- /dev/null +++ b/src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_a_alt.obj @@ -0,0 +1,351 @@ +# Blender v2.79 (sub 0) OBJ File: 'busbar.blend' +# www.blender.org +mtllib busmaterial.mtl +o busbar_alt +v 0.000000 0.187500 0.437500 +v 0.000000 0.250000 0.437500 +v 1.000000 0.187500 0.437500 +v 1.000000 0.250000 0.437500 +v 0.000000 0.187500 0.562500 +v 0.000000 0.250000 0.562500 +v 1.000000 0.187500 0.562500 +v 1.000000 0.250000 0.562500 +v 0.000000 0.187500 0.125000 +v 0.000000 0.250000 0.125000 +v 1.000000 0.187500 0.125000 +v 1.000000 0.250000 0.125000 +v 0.000000 0.187500 0.250000 +v 0.000000 0.250000 0.250000 +v 1.000000 0.187500 0.250000 +v 1.000000 0.250000 0.250000 +v 0.000000 0.187500 0.750000 +v 0.000000 0.250000 0.750000 +v 1.000000 0.187500 0.750000 +v 1.000000 0.250000 0.750000 +v 0.000000 0.187500 0.875000 +v 0.000000 0.250000 0.875000 +v 1.000000 0.187500 0.875000 +v 1.000000 0.250000 0.875000 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.312500 0.875000 +vt 0.312500 0.812500 +vt 0.687500 0.812500 +vt 0.687500 0.875000 +vt 0.562500 0.875000 +vt 0.562500 0.812500 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.312500 0.875000 +vt 0.312500 0.812500 +vt 0.687500 0.812500 +vt 0.687500 0.875000 +vt 0.562500 0.875000 +vt 0.562500 0.812500 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.312500 0.875000 +vt 0.312500 0.812500 +vt 0.687500 0.812500 +vt 0.687500 0.875000 +vt 0.562500 0.875000 +vt 0.562500 0.812500 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 1.0000 0.0000 +usemtl None +s off +f 3/1/1 4/2/1 8/3/1 7/4/1 +f 5/5/2 6/6/2 2/7/2 1/8/2 +f 5/9/3 1/10/3 3/11/3 7/12/3 +f 3/13/4 1/14/4 2/15/4 4/16/4 +f 5/17/5 7/18/5 8/19/5 6/20/5 +f 8/19/6 4/21/6 2/22/6 6/20/6 +f 11/23/1 12/24/1 16/25/1 15/26/1 +f 13/27/2 14/28/2 10/29/2 9/30/2 +f 13/31/3 9/32/3 11/33/3 15/34/3 +f 11/35/4 9/36/4 10/37/4 12/38/4 +f 13/39/5 15/40/5 16/41/5 14/42/5 +f 16/41/6 12/43/6 10/44/6 14/42/6 +f 19/45/1 20/46/1 24/47/1 23/48/1 +f 21/49/2 22/50/2 18/51/2 17/52/2 +f 21/53/3 17/54/3 19/55/3 23/56/3 +f 19/57/4 17/58/4 18/59/4 20/60/4 +f 21/61/5 23/62/5 24/63/5 22/64/5 +f 24/63/6 20/65/6 18/66/6 22/64/6 +o busbar_isolators_alt +v 0.562500 0.062500 0.562500 +v 0.531250 0.125000 0.531250 +v 0.562500 0.062500 0.437500 +v 0.531250 0.125000 0.468750 +v 0.437500 0.062500 0.437500 +v 0.468750 0.125000 0.468750 +v 0.468750 0.125000 0.531250 +v 0.437500 0.062500 0.562500 +v 0.531250 0.187500 0.468750 +v 0.562500 0.000000 0.437500 +v 0.531250 0.187500 0.531250 +v 0.562500 0.000000 0.562500 +v 0.468750 0.187500 0.468750 +v 0.437500 0.000000 0.437500 +v 0.468750 0.187500 0.531250 +v 0.437500 0.000000 0.562500 +v 0.437500 0.000000 0.250000 +v 0.468750 0.187500 0.218750 +v 0.437500 0.000000 0.125000 +v 0.468750 0.187500 0.156250 +v 0.562500 0.000000 0.250000 +v 0.531250 0.187500 0.218750 +v 0.562500 0.000000 0.125000 +v 0.531250 0.187500 0.156250 +v 0.437500 0.062500 0.250000 +v 0.468750 0.125000 0.218750 +v 0.468750 0.125000 0.156250 +v 0.437500 0.062500 0.125000 +v 0.531250 0.125000 0.156250 +v 0.562500 0.062500 0.125000 +v 0.531250 0.125000 0.218750 +v 0.562500 0.062500 0.250000 +v 0.562500 0.062500 0.875000 +v 0.531250 0.125000 0.843750 +v 0.562500 0.062500 0.750000 +v 0.531250 0.125000 0.781250 +v 0.437500 0.062500 0.750000 +v 0.468750 0.125000 0.781250 +v 0.468750 0.125000 0.843750 +v 0.437500 0.062500 0.875000 +v 0.531250 0.187500 0.781250 +v 0.562500 0.000000 0.750000 +v 0.531250 0.187500 0.843750 +v 0.562500 0.000000 0.875000 +v 0.468750 0.187500 0.781250 +v 0.437500 0.000000 0.750000 +v 0.468750 0.187500 0.843750 +v 0.437500 0.000000 0.875000 +vt 0.125000 0.062500 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.000000 0.062500 +vt 0.125000 0.062500 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.000000 0.062500 +vt 0.125000 0.000000 +vt 0.000000 0.000000 +vt 0.125000 0.000000 +vt 0.000000 0.000000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.312500 +vt 0.000000 0.312500 +vt 0.000000 0.187500 +vt 0.125000 0.187500 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.312500 +vt 0.000000 0.312500 +vt 0.000000 0.187500 +vt 0.125000 0.187500 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.062500 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.000000 0.062500 +vt 0.125000 0.062500 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.000000 0.062500 +vt 0.125000 0.000000 +vt 0.000000 0.000000 +vt 0.125000 0.000000 +vt 0.000000 0.000000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.312500 +vt 0.000000 0.312500 +vt 0.000000 0.187500 +vt 0.125000 0.187500 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vn 0.8944 0.4472 0.0000 +vn 0.0000 0.4472 0.8944 +vn 0.0000 0.0000 1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.4472 -0.8944 +vn -0.8944 0.4472 0.0000 +usemtl None +s off +f 27/67/7 28/68/7 26/69/7 25/70/7 +f 25/71/8 26/72/8 31/73/8 32/74/8 +f 36/75/9 25/71/9 32/74/9 40/76/9 +f 34/77/10 27/67/10 25/70/10 36/78/10 +f 38/79/11 29/80/11 27/81/11 34/82/11 +f 26/83/9 35/84/9 39/85/9 31/86/9 +f 30/87/11 37/88/11 33/89/11 28/90/11 +f 31/91/12 39/92/12 37/93/12 30/94/12 +f 28/95/10 33/96/10 35/97/10 26/98/10 +f 38/99/13 34/100/13 36/101/13 40/102/13 +f 50/103/12 42/104/12 44/105/12 51/106/12 +f 51/107/11 44/108/11 48/109/11 53/110/11 +f 53/111/10 48/112/10 46/113/10 55/114/10 +f 55/115/9 46/116/9 42/117/9 50/118/9 +f 43/119/13 47/120/13 45/121/13 41/122/13 +f 45/123/9 56/124/9 49/125/9 41/126/9 +f 56/124/8 55/127/8 50/128/8 49/125/8 +f 47/129/10 54/130/10 56/131/10 45/132/10 +f 54/130/7 53/133/7 55/134/7 56/131/7 +f 43/135/11 52/136/11 54/137/11 47/138/11 +f 52/136/14 51/139/14 53/140/14 54/137/14 +f 41/141/12 49/142/12 52/143/12 43/144/12 +f 49/142/15 50/145/15 51/146/15 52/143/15 +f 29/80/14 30/147/14 28/148/14 27/81/14 +f 40/149/12 32/150/12 29/151/12 38/152/12 +f 32/150/15 31/153/15 30/154/15 29/151/15 +f 59/155/7 60/156/7 58/157/7 57/158/7 +f 57/159/8 58/160/8 63/161/8 64/162/8 +f 68/163/9 57/159/9 64/162/9 72/164/9 +f 66/165/10 59/155/10 57/158/10 68/166/10 +f 70/167/11 61/168/11 59/169/11 66/170/11 +f 58/171/9 67/172/9 71/173/9 63/174/9 +f 62/175/11 69/176/11 65/177/11 60/178/11 +f 63/179/12 71/180/12 69/181/12 62/182/12 +f 60/183/10 65/184/10 67/185/10 58/186/10 +f 70/187/13 66/188/13 68/189/13 72/190/13 +f 61/168/14 62/191/14 60/192/14 59/169/14 +f 72/193/12 64/194/12 61/195/12 70/196/12 +f 64/194/15 63/197/15 62/198/15 61/195/15 diff --git a/src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_b.obj b/src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_b.obj new file mode 100644 index 0000000..d5bdc8a --- /dev/null +++ b/src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_b.obj @@ -0,0 +1,120 @@ +# Blender v2.79 (sub 0) OBJ File: 'busbar.blend' +# www.blender.org +mtllib busmaterial.mtl +o busbar +v 0.437500 0.187500 1.000000 +v 0.437500 0.250000 1.000000 +v 0.437500 0.187500 0.000000 +v 0.437500 0.250000 0.000000 +v 0.562500 0.187500 1.000000 +v 0.562500 0.250000 1.000000 +v 0.562500 0.187500 0.000000 +v 0.562500 0.250000 0.000000 +v 0.125000 0.187500 1.000000 +v 0.125000 0.250000 1.000000 +v 0.125000 0.187500 0.000000 +v 0.125000 0.250000 0.000000 +v 0.250000 0.187500 1.000000 +v 0.250000 0.250000 1.000000 +v 0.250000 0.187500 0.000000 +v 0.250000 0.250000 0.000000 +v 0.750000 0.187500 1.000000 +v 0.750000 0.250000 1.000000 +v 0.750000 0.187500 0.000000 +v 0.750000 0.250000 0.000000 +v 0.875000 0.187500 1.000000 +v 0.875000 0.250000 1.000000 +v 0.875000 0.187500 0.000000 +v 0.875000 0.250000 0.000000 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.312500 0.875000 +vt 0.312500 0.812500 +vt 0.687500 0.812500 +vt 0.687500 0.875000 +vt 0.562500 0.875000 +vt 0.562500 0.812500 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.312500 0.875000 +vt 0.312500 0.812500 +vt 0.687500 0.812500 +vt 0.687500 0.875000 +vt 0.562500 0.875000 +vt 0.562500 0.812500 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.312500 0.875000 +vt 0.312500 0.812500 +vt 0.687500 0.812500 +vt 0.687500 0.875000 +vt 0.562500 0.875000 +vt 0.562500 0.812500 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 -1.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +usemtl None +s off +f 3/1/1 4/2/1 8/3/1 7/4/1 +f 5/5/2 6/6/2 2/7/2 1/8/2 +f 5/9/3 1/10/3 3/11/3 7/12/3 +f 3/13/4 1/14/4 2/15/4 4/16/4 +f 5/17/5 7/18/5 8/19/5 6/20/5 +f 8/19/6 4/21/6 2/22/6 6/20/6 +f 11/23/1 12/24/1 16/25/1 15/26/1 +f 13/27/2 14/28/2 10/29/2 9/30/2 +f 13/31/3 9/32/3 11/33/3 15/34/3 +f 11/35/4 9/36/4 10/37/4 12/38/4 +f 13/39/5 15/40/5 16/41/5 14/42/5 +f 16/41/6 12/43/6 10/44/6 14/42/6 +f 19/45/1 20/46/1 24/47/1 23/48/1 +f 21/49/2 22/50/2 18/51/2 17/52/2 +f 21/53/3 17/54/3 19/55/3 23/56/3 +f 19/57/4 17/58/4 18/59/4 20/60/4 +f 21/61/5 23/62/5 24/63/5 22/64/5 +f 24/63/6 20/65/6 18/66/6 22/64/6 diff --git a/src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_b_alt.obj b/src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_b_alt.obj new file mode 100644 index 0000000..0603a03 --- /dev/null +++ b/src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_b_alt.obj @@ -0,0 +1,120 @@ +# Blender v2.79 (sub 0) OBJ File: 'busbar.blend' +# www.blender.org +mtllib busmaterial.mtl +o busbar_alt +v 0.000000 0.187500 0.437500 +v 0.000000 0.250000 0.437500 +v 1.000000 0.187500 0.437500 +v 1.000000 0.250000 0.437500 +v 0.000000 0.187500 0.562500 +v 0.000000 0.250000 0.562500 +v 1.000000 0.187500 0.562500 +v 1.000000 0.250000 0.562500 +v 0.000000 0.187500 0.125000 +v 0.000000 0.250000 0.125000 +v 1.000000 0.187500 0.125000 +v 1.000000 0.250000 0.125000 +v 0.000000 0.187500 0.250000 +v 0.000000 0.250000 0.250000 +v 1.000000 0.187500 0.250000 +v 1.000000 0.250000 0.250000 +v 0.000000 0.187500 0.750000 +v 0.000000 0.250000 0.750000 +v 1.000000 0.187500 0.750000 +v 1.000000 0.250000 0.750000 +v 0.000000 0.187500 0.875000 +v 0.000000 0.250000 0.875000 +v 1.000000 0.187500 0.875000 +v 1.000000 0.250000 0.875000 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.312500 0.875000 +vt 0.312500 0.812500 +vt 0.687500 0.812500 +vt 0.687500 0.875000 +vt 0.562500 0.875000 +vt 0.562500 0.812500 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.312500 0.875000 +vt 0.312500 0.812500 +vt 0.687500 0.812500 +vt 0.687500 0.875000 +vt 0.562500 0.875000 +vt 0.562500 0.812500 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.312500 0.875000 +vt 0.312500 0.812500 +vt 0.687500 0.812500 +vt 0.687500 0.875000 +vt 0.562500 0.875000 +vt 0.562500 0.812500 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 1.0000 0.0000 +usemtl None +s off +f 3/1/1 4/2/1 8/3/1 7/4/1 +f 5/5/2 6/6/2 2/7/2 1/8/2 +f 5/9/3 1/10/3 3/11/3 7/12/3 +f 3/13/4 1/14/4 2/15/4 4/16/4 +f 5/17/5 7/18/5 8/19/5 6/20/5 +f 8/19/6 4/21/6 2/22/6 6/20/6 +f 11/23/1 12/24/1 16/25/1 15/26/1 +f 13/27/2 14/28/2 10/29/2 9/30/2 +f 13/31/3 9/32/3 11/33/3 15/34/3 +f 11/35/4 9/36/4 10/37/4 12/38/4 +f 13/39/5 15/40/5 16/41/5 14/42/5 +f 16/41/6 12/43/6 10/44/6 14/42/6 +f 19/45/1 20/46/1 24/47/1 23/48/1 +f 21/49/2 22/50/2 18/51/2 17/52/2 +f 21/53/3 17/54/3 19/55/3 23/56/3 +f 19/57/4 17/58/4 18/59/4 20/60/4 +f 21/61/5 23/62/5 24/63/5 22/64/5 +f 24/63/6 20/65/6 18/66/6 22/64/6 diff --git a/src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_bend.obj b/src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_bend.obj new file mode 100644 index 0000000..04c293b --- /dev/null +++ b/src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_bend.obj @@ -0,0 +1,472 @@ +# Blender v2.79 (sub 0) OBJ File: 'busbar.blend' +# www.blender.org +mtllib busmaterial.mtl +o busbar_bend +v 0.437500 0.187500 0.562500 +v 0.437500 0.187500 0.000000 +v 0.437500 0.250000 0.000000 +v 0.562500 0.250000 0.562500 +v 0.562500 0.250000 0.000000 +v 0.125000 0.187500 0.250000 +v 0.125000 0.250000 0.250000 +v 0.125000 0.250000 0.000000 +v 0.250000 0.250000 0.250000 +v 0.250000 0.187500 0.000000 +v 0.250000 0.250000 0.000000 +v 0.750000 0.250000 0.000000 +v 0.875000 0.187500 0.000000 +v 0.875000 0.250000 0.000000 +v 0.562500 0.187500 0.562500 +v 0.000000 0.250000 0.562500 +v 0.000000 0.250000 0.437500 +v 0.250000 0.187500 0.250000 +v 0.000000 0.187500 0.250000 +v 0.000000 0.250000 0.250000 +v 0.000000 0.250000 0.125000 +v 0.875000 0.187500 0.875000 +v 0.875000 0.250000 0.875000 +v 0.875000 0.187500 0.750000 +v 0.875000 0.250000 0.750000 +v 0.750000 0.187500 0.750000 +v 0.750000 0.187500 0.875000 +v 0.750000 0.250000 0.875000 +v 0.750000 0.250000 0.750000 +v 0.437500 0.250000 0.562500 +v 0.437500 0.250000 0.437500 +v 0.562500 0.187500 0.437500 +v 0.562500 0.250000 0.437500 +v 0.437500 0.187500 0.437500 +v 0.125000 0.187500 0.125000 +v 0.250000 0.187500 0.125000 +v 0.250000 0.250000 0.125000 +v 0.125000 0.250000 0.125000 +v 0.000000 0.187500 0.562500 +v 0.000000 0.187500 0.750000 +v 0.000000 0.187500 0.875000 +v 0.000000 0.250000 0.875000 +v 0.000000 0.250000 0.750000 +v 0.000000 0.187500 0.437500 +v 0.000000 0.187500 0.125000 +v 0.125000 0.187500 0.000000 +v 0.562500 0.187500 0.000000 +v 0.750000 0.187500 0.000000 +vt 0.687500 0.812500 +vt 0.687500 0.875000 +vt 0.562500 0.875000 +vt 0.562500 0.812500 +vt 0.687500 0.812500 +vt 0.687500 0.875000 +vt 0.562500 0.875000 +vt 0.562500 0.812500 +vt 0.875000 1.000000 +vt 0.875000 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.875000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.875000 0.875000 +vt 0.000000 0.812500 +vt 0.750000 0.812500 +vt 0.750000 0.875000 +vt 0.000000 0.875000 +vt 0.687500 0.812500 +vt 0.687500 0.875000 +vt 0.562500 0.875000 +vt 0.562500 0.812500 +vt 0.687500 0.812500 +vt 0.687500 0.875000 +vt 0.562500 0.875000 +vt 0.562500 0.812500 +vt 0.875000 1.000000 +vt 0.875000 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.875000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.875000 0.875000 +vt 0.250000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.250000 0.875000 +vt 0.000000 0.812500 +vt 0.750000 0.812500 +vt 0.750000 0.875000 +vt 0.000000 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.250000 1.000000 +vt 0.250000 0.875000 +vt 0.875000 0.812500 +vt 0.875000 0.875000 +vt 1.000000 1.000000 +vt 0.250000 1.000000 +vt 0.250000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.250000 0.875000 +vt 0.250000 1.000000 +vt 0.125000 1.000000 +vt 0.125000 0.875000 +vt 0.125000 0.812500 +vt 0.250000 1.000000 +vt 0.250000 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.125000 1.000000 +vt 0.125000 0.875000 +vt 1.000000 1.000000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.562500 1.000000 +vt 0.562500 0.875000 +vt 0.562500 0.812500 +vt 1.000000 0.812500 +vt 0.000000 0.812500 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.000000 0.875000 +vt 0.562500 0.875000 +vt 0.562500 1.000000 +vt 0.437500 1.000000 +vt 0.437500 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.562500 1.000000 +vt 0.562500 0.875000 +vt 0.562500 0.812500 +vt 1.000000 0.812500 +vt 0.000000 0.812500 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.000000 0.875000 +vt 0.562500 1.000000 +vt 0.562500 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.437500 1.000000 +vt 0.437500 0.875000 +vt 1.000000 1.000000 +vt 0.875000 1.000000 +vt 0.750000 1.000000 +vt 0.750000 0.875000 +vt 0.000000 0.812500 +vt 0.125000 0.812500 +vt 0.125000 0.875000 +vt 0.000000 0.875000 +vt 0.750000 1.000000 +vt 0.750000 0.875000 +vt 1.000000 1.000000 +vt 0.875000 1.000000 +vt 0.000000 0.812500 +vt 0.125000 0.812500 +vt 0.125000 0.875000 +vt 0.000000 0.875000 +vt 0.750000 0.812500 +vt 0.875000 0.812500 +vt 0.875000 0.875000 +vt 0.750000 0.875000 +vt 0.437500 0.812500 +vt 0.562500 0.812500 +vt 0.562500 0.875000 +vt 0.437500 0.875000 +vt 0.125000 0.812500 +vt 0.250000 0.812500 +vt 0.250000 0.875000 +vt 0.125000 0.875000 +vt 0.750000 0.812500 +vt 0.875000 0.812500 +vt 0.875000 0.875000 +vt 0.750000 0.875000 +vt 0.437500 0.812500 +vt 0.562500 0.812500 +vt 0.562500 0.875000 +vt 0.437500 0.875000 +vt 0.125000 0.812500 +vt 0.250000 0.812500 +vt 0.250000 0.875000 +vt 0.125000 0.875000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 -1.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn -0.0000 -0.0000 -1.0000 +vn 0.0000 1.0000 0.0000 +usemtl None +s off +f 15/1/1 4/2/1 30/3/1 1/4/1 +f 18/5/1 9/6/1 7/7/1 6/8/1 +f 36/9/2 35/10/2 46/11/2 10/12/2 +f 36/13/3 10/14/3 11/15/3 37/16/3 +f 48/17/4 26/18/4 29/19/4 12/20/4 +f 32/21/3 33/22/3 4/23/3 15/24/3 +f 36/25/3 37/26/3 9/27/3 18/28/3 +f 35/29/2 6/30/2 19/31/2 45/32/2 +f 35/33/5 45/34/5 21/35/5 38/36/5 +f 26/37/5 40/38/5 43/39/5 29/40/5 +f 41/41/1 27/42/1 28/43/1 42/44/1 +f 41/45/2 40/46/2 26/47/2 27/48/2 +f 27/42/1 22/49/1 23/50/1 28/43/1 +f 43/39/6 42/51/6 28/52/6 29/40/6 +f 24/53/3 13/54/3 14/55/3 25/56/3 +f 25/56/6 29/57/6 28/58/6 23/59/6 +f 22/60/3 24/53/3 25/56/3 23/59/3 +f 24/61/2 26/62/2 48/63/2 13/64/2 +f 22/65/2 27/66/2 26/62/2 24/61/2 +f 29/57/6 25/56/6 14/55/6 12/67/6 +f 5/68/6 3/69/6 31/70/6 33/71/6 +f 32/72/3 47/73/3 5/68/3 33/71/3 +f 2/74/4 34/75/4 31/76/4 3/77/4 +f 34/78/2 32/79/2 15/80/2 1/81/2 +f 32/79/2 34/78/2 2/82/2 47/83/2 +f 17/84/6 16/85/6 30/86/6 31/87/6 +f 34/88/5 44/89/5 17/84/5 31/87/5 +f 39/90/1 1/91/1 30/92/1 16/93/1 +f 34/94/2 1/95/2 39/96/2 44/97/2 +f 30/98/6 4/99/6 33/71/6 31/70/6 +f 11/15/6 8/100/6 38/101/6 37/16/6 +f 37/16/6 38/101/6 7/102/6 9/103/6 +f 46/104/4 35/105/4 38/106/4 8/107/4 +f 18/108/2 6/109/2 35/10/2 36/9/2 +f 21/35/6 20/110/6 7/111/6 38/36/6 +f 19/112/1 6/113/1 7/114/1 20/115/1 +f 40/116/4 41/117/4 42/118/4 43/119/4 +f 44/120/4 39/121/4 16/122/4 17/123/4 +f 45/124/4 19/125/4 20/126/4 21/127/4 +f 10/128/5 46/129/5 8/130/5 11/131/5 +f 47/132/5 2/133/5 3/134/5 5/135/5 +f 13/136/5 48/137/5 12/138/5 14/139/5 +o busbar_insulators_corner +v 0.562500 0.062500 0.562500 +v 0.531250 0.125000 0.531250 +v 0.562500 0.062500 0.437500 +v 0.531250 0.125000 0.468750 +v 0.437500 0.062500 0.437500 +v 0.468750 0.125000 0.468750 +v 0.468750 0.125000 0.531250 +v 0.437500 0.062500 0.562500 +v 0.531250 0.187500 0.468750 +v 0.562500 0.000000 0.437500 +v 0.531250 0.187500 0.531250 +v 0.562500 0.000000 0.562500 +v 0.468750 0.187500 0.468750 +v 0.437500 0.000000 0.437500 +v 0.468750 0.187500 0.531250 +v 0.437500 0.000000 0.562500 +v 0.125000 0.000000 0.250000 +v 0.156250 0.187500 0.218750 +v 0.125000 0.000000 0.125000 +v 0.156250 0.187500 0.156250 +v 0.250000 0.000000 0.250000 +v 0.218750 0.187500 0.218750 +v 0.250000 0.000000 0.125000 +v 0.218750 0.187500 0.156250 +v 0.125000 0.062500 0.250000 +v 0.156250 0.125000 0.218750 +v 0.156250 0.125000 0.156250 +v 0.125000 0.062500 0.125000 +v 0.218750 0.125000 0.156250 +v 0.250000 0.062500 0.125000 +v 0.218750 0.125000 0.218750 +v 0.250000 0.062500 0.250000 +v 0.875000 0.062500 0.875000 +v 0.843750 0.125000 0.843750 +v 0.875000 0.062500 0.750000 +v 0.843750 0.125000 0.781250 +v 0.750000 0.062500 0.750000 +v 0.781250 0.125000 0.781250 +v 0.781250 0.125000 0.843750 +v 0.750000 0.062500 0.875000 +v 0.843750 0.187500 0.781250 +v 0.875000 0.000000 0.750000 +v 0.843750 0.187500 0.843750 +v 0.875000 0.000000 0.875000 +v 0.781250 0.187500 0.781250 +v 0.750000 0.000000 0.750000 +v 0.781250 0.187500 0.843750 +v 0.750000 0.000000 0.875000 +vt 0.125000 0.062500 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.000000 0.062500 +vt 0.125000 0.062500 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.000000 0.062500 +vt 0.125000 0.000000 +vt 0.000000 0.000000 +vt 0.125000 0.000000 +vt 0.000000 0.000000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.312500 +vt 0.000000 0.312500 +vt 0.000000 0.187500 +vt 0.125000 0.187500 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.312500 +vt 0.000000 0.312500 +vt 0.000000 0.187500 +vt 0.125000 0.187500 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.062500 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.000000 0.062500 +vt 0.125000 0.062500 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.000000 0.062500 +vt 0.125000 0.000000 +vt 0.000000 0.000000 +vt 0.125000 0.000000 +vt 0.000000 0.000000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.312500 +vt 0.000000 0.312500 +vt 0.000000 0.187500 +vt 0.125000 0.187500 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vn 0.8944 0.4472 0.0000 +vn 0.0000 0.4472 0.8944 +vn 0.0000 0.0000 1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.4472 -0.8944 +vn -0.8944 0.4472 0.0000 +usemtl None +s off +f 51/140/7 52/141/7 50/142/7 49/143/7 +f 49/144/8 50/145/8 55/146/8 56/147/8 +f 60/148/9 49/144/9 56/147/9 64/149/9 +f 58/150/10 51/140/10 49/143/10 60/151/10 +f 62/152/11 53/153/11 51/154/11 58/155/11 +f 50/156/9 59/157/9 63/158/9 55/159/9 +f 54/160/11 61/161/11 57/162/11 52/163/11 +f 55/164/12 63/165/12 61/166/12 54/167/12 +f 52/168/10 57/169/10 59/170/10 50/171/10 +f 62/172/13 58/173/13 60/174/13 64/175/13 +f 74/176/12 66/177/12 68/178/12 75/179/12 +f 75/180/11 68/181/11 72/182/11 77/183/11 +f 77/184/10 72/185/10 70/186/10 79/187/10 +f 79/188/9 70/189/9 66/190/9 74/191/9 +f 67/192/13 71/193/13 69/194/13 65/195/13 +f 69/196/9 80/197/9 73/198/9 65/199/9 +f 80/197/8 79/200/8 74/201/8 73/198/8 +f 71/202/10 78/203/10 80/204/10 69/205/10 +f 78/203/7 77/206/7 79/207/7 80/204/7 +f 67/208/11 76/209/11 78/210/11 71/211/11 +f 76/209/14 75/212/14 77/213/14 78/210/14 +f 65/214/12 73/215/12 76/216/12 67/217/12 +f 73/215/15 74/218/15 75/219/15 76/216/15 +f 53/153/14 54/220/14 52/221/14 51/154/14 +f 64/222/12 56/223/12 53/224/12 62/225/12 +f 56/223/15 55/226/15 54/227/15 53/224/15 +f 83/228/7 84/229/7 82/230/7 81/231/7 +f 81/232/8 82/233/8 87/234/8 88/235/8 +f 92/236/9 81/232/9 88/235/9 96/237/9 +f 90/238/10 83/228/10 81/231/10 92/239/10 +f 94/240/11 85/241/11 83/242/11 90/243/11 +f 82/244/9 91/245/9 95/246/9 87/247/9 +f 86/248/11 93/249/11 89/250/11 84/251/11 +f 87/252/12 95/253/12 93/254/12 86/255/12 +f 84/256/10 89/257/10 91/258/10 82/259/10 +f 94/260/13 90/261/13 92/262/13 96/263/13 +f 85/241/14 86/264/14 84/265/14 83/242/14 +f 96/266/12 88/267/12 85/268/12 94/269/12 +f 88/267/15 87/270/15 86/271/15 85/268/15 diff --git a/src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_edge_inside.obj b/src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_edge_inside.obj new file mode 100644 index 0000000..f931996 --- /dev/null +++ b/src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_edge_inside.obj @@ -0,0 +1,705 @@ +# Blender v2.79 (sub 0) OBJ File: 'busbar.blend' +# www.blender.org +mtllib busmaterial.mtl +o busbar_edge_inside +v 0.437500 0.187500 0.812500 +v 0.437500 0.250000 0.812500 +v 0.437500 0.187500 0.000000 +v 0.437500 0.250000 0.000000 +v 0.562500 0.187500 0.812500 +v 0.562500 0.250000 0.812500 +v 0.562500 0.187500 0.000000 +v 0.562500 0.250000 0.000000 +v 0.562500 1.000000 0.812500 +v 0.562500 1.000000 0.750000 +v 0.437500 1.000000 0.812500 +v 0.437500 1.000000 0.750000 +v 0.562500 0.250000 0.750000 +v 0.437500 0.250000 0.750000 +v 0.562500 0.187500 0.750000 +v 0.437500 0.187500 0.750000 +v 0.125000 0.187500 0.812500 +v 0.125000 0.250000 0.812500 +v 0.125000 0.187500 0.000000 +v 0.125000 0.250000 0.000000 +v 0.250000 0.187500 0.812500 +v 0.250000 0.250000 0.812500 +v 0.250000 0.187500 0.000000 +v 0.250000 0.250000 0.000000 +v 0.250000 1.000000 0.812500 +v 0.250000 1.000000 0.750000 +v 0.125000 1.000000 0.812500 +v 0.125000 1.000000 0.750000 +v 0.250000 0.250000 0.750000 +v 0.125000 0.250000 0.750000 +v 0.250000 0.187500 0.750000 +v 0.125000 0.187500 0.750000 +v 0.750000 0.187500 0.812500 +v 0.750000 0.250000 0.812500 +v 0.750000 0.187500 0.000000 +v 0.750000 0.250000 0.000000 +v 0.875000 0.187500 0.812500 +v 0.875000 0.250000 0.812500 +v 0.875000 0.187500 0.000000 +v 0.875000 0.250000 0.000000 +v 0.875000 1.000000 0.812500 +v 0.875000 1.000000 0.750000 +v 0.750000 1.000000 0.812500 +v 0.750000 1.000000 0.750000 +v 0.875000 0.250000 0.750000 +v 0.750000 0.250000 0.750000 +v 0.875000 0.187500 0.750000 +v 0.750000 0.187500 0.750000 +vt 0.687500 0.812500 +vt 0.687500 0.875000 +vt 0.562500 0.875000 +vt 0.562500 0.812500 +vt 0.937500 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.937500 0.875000 +vt 0.250000 1.000000 +vt 0.250000 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.250000 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.250000 1.000000 +vt 0.250000 0.812500 +vt 1.000000 0.812500 +vt 0.000000 0.812500 +vt 0.750000 0.812500 +vt 0.750000 0.875000 +vt 0.000000 0.875000 +vt 0.250000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.250000 0.875000 +vt 0.250000 1.000000 +vt 1.000000 1.000000 +vt 0.250000 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.250000 1.000000 +vt 0.000000 0.812500 +vt 0.750000 0.812500 +vt 0.750000 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.875000 +vt 0.062500 0.875000 +vt 0.062500 1.000000 +vt 0.000000 1.000000 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.312500 0.875000 +vt 0.312500 0.812500 +vt 0.000000 0.812500 +vt 0.062500 0.812500 +vt 0.062500 0.875000 +vt 0.000000 0.875000 +vt 0.687500 0.812500 +vt 0.687500 0.875000 +vt 0.562500 0.875000 +vt 0.562500 0.812500 +vt 0.937500 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.937500 0.875000 +vt 0.250000 1.000000 +vt 0.250000 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.250000 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.250000 1.000000 +vt 0.250000 0.812500 +vt 1.000000 0.812500 +vt 0.000000 0.812500 +vt 0.750000 0.812500 +vt 0.750000 0.875000 +vt 0.000000 0.875000 +vt 0.250000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.250000 0.875000 +vt 0.250000 1.000000 +vt 1.000000 1.000000 +vt 0.250000 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.250000 1.000000 +vt 0.000000 0.812500 +vt 0.750000 0.812500 +vt 0.750000 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.875000 +vt 0.062500 0.875000 +vt 0.062500 1.000000 +vt 0.000000 1.000000 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.312500 0.875000 +vt 0.312500 0.812500 +vt 0.000000 0.812500 +vt 0.062500 0.812500 +vt 0.062500 0.875000 +vt 0.000000 0.875000 +vt 0.687500 0.812500 +vt 0.687500 0.875000 +vt 0.562500 0.875000 +vt 0.562500 0.812500 +vt 0.937500 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.937500 0.875000 +vt 0.250000 1.000000 +vt 0.250000 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.250000 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.250000 1.000000 +vt 0.250000 0.812500 +vt 1.000000 0.812500 +vt 0.000000 0.812500 +vt 0.750000 0.812500 +vt 0.750000 0.875000 +vt 0.000000 0.875000 +vt 0.250000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.250000 0.875000 +vt 0.250000 1.000000 +vt 1.000000 1.000000 +vt 0.250000 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.250000 1.000000 +vt 0.000000 0.812500 +vt 0.750000 0.812500 +vt 0.750000 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.875000 +vt 0.062500 0.875000 +vt 0.062500 1.000000 +vt 0.000000 1.000000 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.312500 0.875000 +vt 0.312500 0.812500 +vt 0.000000 0.812500 +vt 0.062500 0.812500 +vt 0.062500 0.875000 +vt 0.000000 0.875000 +vn 0.0000 0.0000 1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +usemtl None +s off +f 5/1/1 6/2/1 2/3/1 1/4/1 +f 16/5/2 1/6/2 2/7/2 14/8/2 +f 14/9/3 13/10/3 8/11/3 4/12/3 +f 16/13/4 3/14/4 7/15/4 15/16/4 +f 15/17/5 7/18/5 8/11/5 13/10/5 +f 12/19/2 14/20/2 2/21/2 11/22/2 +f 13/23/5 10/24/5 9/25/5 6/26/5 +f 2/27/1 6/26/1 9/25/1 11/28/1 +f 14/29/6 12/30/6 10/31/6 13/32/6 +f 3/33/2 16/34/2 14/35/2 4/36/2 +f 1/37/4 16/38/4 15/39/4 5/40/4 +f 12/41/3 11/42/3 9/43/3 10/44/3 +f 5/45/5 15/46/5 13/47/5 6/48/5 +f 21/49/1 22/50/1 18/51/1 17/52/1 +f 32/53/2 17/54/2 18/55/2 30/56/2 +f 30/57/3 29/58/3 24/59/3 20/60/3 +f 32/61/4 19/62/4 23/63/4 31/64/4 +f 31/65/5 23/66/5 24/59/5 29/58/5 +f 28/67/2 30/68/2 18/69/2 27/70/2 +f 29/71/5 26/72/5 25/73/5 22/74/5 +f 18/75/1 22/74/1 25/73/1 27/76/1 +f 30/77/6 28/78/6 26/79/6 29/80/6 +f 19/81/2 32/82/2 30/83/2 20/84/2 +f 17/85/4 32/86/4 31/87/4 21/88/4 +f 28/89/3 27/90/3 25/91/3 26/92/3 +f 21/93/5 31/94/5 29/95/5 22/96/5 +f 37/97/1 38/98/1 34/99/1 33/100/1 +f 48/101/2 33/102/2 34/103/2 46/104/2 +f 46/105/3 45/106/3 40/107/3 36/108/3 +f 48/109/4 35/110/4 39/111/4 47/112/4 +f 47/113/5 39/114/5 40/107/5 45/106/5 +f 44/115/2 46/116/2 34/117/2 43/118/2 +f 45/119/5 42/120/5 41/121/5 38/122/5 +f 34/123/1 38/122/1 41/121/1 43/124/1 +f 46/125/6 44/126/6 42/127/6 45/128/6 +f 35/129/2 48/130/2 46/131/2 36/132/2 +f 33/133/4 48/134/4 47/135/4 37/136/4 +f 44/137/3 43/138/3 41/139/3 42/140/3 +f 37/141/5 47/142/5 45/143/5 38/144/5 +o busbar_isolators.001_busbar_isolators +v 0.562500 0.062500 0.562500 +v 0.531250 0.125000 0.531250 +v 0.562500 0.062500 0.437500 +v 0.531250 0.125000 0.468750 +v 0.437500 0.062500 0.437500 +v 0.468750 0.125000 0.468750 +v 0.468750 0.125000 0.531250 +v 0.437500 0.062500 0.562500 +v 0.531250 0.187500 0.468750 +v 0.562500 0.000000 0.437500 +v 0.531250 0.187500 0.531250 +v 0.562500 0.000000 0.562500 +v 0.468750 0.187500 0.468750 +v 0.437500 0.000000 0.437500 +v 0.468750 0.187500 0.531250 +v 0.437500 0.000000 0.562500 +v 0.125000 0.000000 0.562500 +v 0.156250 0.187500 0.531250 +v 0.125000 0.000000 0.437500 +v 0.156250 0.187500 0.468750 +v 0.250000 0.000000 0.562500 +v 0.218750 0.187500 0.531250 +v 0.250000 0.000000 0.437500 +v 0.218750 0.187500 0.468750 +v 0.125000 0.062500 0.562500 +v 0.156250 0.125000 0.531250 +v 0.156250 0.125000 0.468750 +v 0.125000 0.062500 0.437500 +v 0.218750 0.125000 0.468750 +v 0.250000 0.062500 0.437500 +v 0.218750 0.125000 0.531250 +v 0.250000 0.062500 0.562500 +v 0.875000 0.062500 0.562500 +v 0.843750 0.125000 0.531250 +v 0.875000 0.062500 0.437500 +v 0.843750 0.125000 0.468750 +v 0.750000 0.062500 0.437500 +v 0.781250 0.125000 0.468750 +v 0.781250 0.125000 0.531250 +v 0.750000 0.062500 0.562500 +v 0.843750 0.187500 0.468750 +v 0.875000 0.000000 0.437500 +v 0.843750 0.187500 0.531250 +v 0.875000 0.000000 0.562500 +v 0.781250 0.187500 0.468750 +v 0.750000 0.000000 0.437500 +v 0.781250 0.187500 0.531250 +v 0.750000 0.000000 0.562500 +vt 0.125000 0.062500 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.000000 0.062500 +vt 0.125000 0.062500 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.000000 0.062500 +vt 0.125000 0.000000 +vt 0.000000 0.000000 +vt 0.125000 0.000000 +vt 0.000000 0.000000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.312500 +vt 0.000000 0.312500 +vt 0.000000 0.187500 +vt 0.125000 0.187500 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.312500 +vt 0.000000 0.312500 +vt 0.000000 0.187500 +vt 0.125000 0.187500 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.062500 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.000000 0.062500 +vt 0.125000 0.062500 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.000000 0.062500 +vt 0.125000 0.000000 +vt 0.000000 0.000000 +vt 0.125000 0.000000 +vt 0.000000 0.000000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.312500 +vt 0.000000 0.312500 +vt 0.000000 0.187500 +vt 0.125000 0.187500 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vn 0.8944 0.4472 0.0000 +vn 0.0000 0.4472 0.8944 +vn 0.0000 0.0000 1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.4472 -0.8944 +vn -0.8944 0.4472 0.0000 +usemtl None +s off +f 51/145/7 52/146/7 50/147/7 49/148/7 +f 49/149/8 50/150/8 55/151/8 56/152/8 +f 60/153/9 49/149/9 56/152/9 64/154/9 +f 58/155/10 51/145/10 49/148/10 60/156/10 +f 62/157/11 53/158/11 51/159/11 58/160/11 +f 50/161/9 59/162/9 63/163/9 55/164/9 +f 54/165/11 61/166/11 57/167/11 52/168/11 +f 55/169/12 63/170/12 61/171/12 54/172/12 +f 52/173/10 57/174/10 59/175/10 50/176/10 +f 62/177/13 58/178/13 60/179/13 64/180/13 +f 74/181/12 66/182/12 68/183/12 75/184/12 +f 75/185/11 68/186/11 72/187/11 77/188/11 +f 77/189/10 72/190/10 70/191/10 79/192/10 +f 79/193/9 70/194/9 66/195/9 74/196/9 +f 67/197/13 71/198/13 69/199/13 65/200/13 +f 69/201/9 80/202/9 73/203/9 65/204/9 +f 80/202/8 79/205/8 74/206/8 73/203/8 +f 71/207/10 78/208/10 80/209/10 69/210/10 +f 78/208/7 77/211/7 79/212/7 80/209/7 +f 67/213/11 76/214/11 78/215/11 71/216/11 +f 76/214/14 75/217/14 77/218/14 78/215/14 +f 65/219/12 73/220/12 76/221/12 67/222/12 +f 73/220/15 74/223/15 75/224/15 76/221/15 +f 53/158/14 54/225/14 52/226/14 51/159/14 +f 64/227/12 56/228/12 53/229/12 62/230/12 +f 56/228/15 55/231/15 54/232/15 53/229/15 +f 83/233/7 84/234/7 82/235/7 81/236/7 +f 81/237/8 82/238/8 87/239/8 88/240/8 +f 92/241/9 81/237/9 88/240/9 96/242/9 +f 90/243/10 83/233/10 81/236/10 92/244/10 +f 94/245/11 85/246/11 83/247/11 90/248/11 +f 82/249/9 91/250/9 95/251/9 87/252/9 +f 86/253/11 93/254/11 89/255/11 84/256/11 +f 87/257/12 95/258/12 93/259/12 86/260/12 +f 84/261/10 89/262/10 91/263/10 82/264/10 +f 94/265/13 90/266/13 92/267/13 96/268/13 +f 85/246/14 86/269/14 84/270/14 83/247/14 +f 96/271/12 88/272/12 85/273/12 94/274/12 +f 88/272/15 87/275/15 86/276/15 85/273/15 +o busbar_isolators.002_busbar_isolators +v 0.562500 0.562500 0.937500 +v 0.531250 0.531250 0.875000 +v 0.562500 0.437500 0.937500 +v 0.531250 0.468750 0.875000 +v 0.437500 0.437500 0.937500 +v 0.468750 0.468750 0.875000 +v 0.468750 0.531250 0.875000 +v 0.437500 0.562500 0.937500 +v 0.531250 0.468750 0.812500 +v 0.562500 0.437500 1.000000 +v 0.531250 0.531250 0.812500 +v 0.562500 0.562500 1.000000 +v 0.468750 0.468750 0.812500 +v 0.437500 0.437500 1.000000 +v 0.468750 0.531250 0.812500 +v 0.437500 0.562500 1.000000 +v 0.125000 0.562500 1.000000 +v 0.156250 0.531250 0.812500 +v 0.125000 0.437500 1.000000 +v 0.156250 0.468750 0.812500 +v 0.250000 0.562500 1.000000 +v 0.218750 0.531250 0.812500 +v 0.250000 0.437500 1.000000 +v 0.218750 0.468750 0.812500 +v 0.125000 0.562500 0.937500 +v 0.156250 0.531250 0.875000 +v 0.156250 0.468750 0.875000 +v 0.125000 0.437500 0.937500 +v 0.218750 0.468750 0.875000 +v 0.250000 0.437500 0.937500 +v 0.218750 0.531250 0.875000 +v 0.250000 0.562500 0.937500 +v 0.875000 0.562500 0.937500 +v 0.843750 0.531250 0.875000 +v 0.875000 0.437500 0.937500 +v 0.843750 0.468750 0.875000 +v 0.750000 0.437500 0.937500 +v 0.781250 0.468750 0.875000 +v 0.781250 0.531250 0.875000 +v 0.750000 0.562500 0.937500 +v 0.843750 0.468750 0.812500 +v 0.875000 0.437500 1.000000 +v 0.843750 0.531250 0.812500 +v 0.875000 0.562500 1.000000 +v 0.781250 0.468750 0.812500 +v 0.750000 0.437500 1.000000 +v 0.781250 0.531250 0.812500 +v 0.750000 0.562500 1.000000 +vt 0.125000 0.062500 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.000000 0.062500 +vt 0.125000 0.062500 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.000000 0.062500 +vt 0.125000 0.000000 +vt 0.000000 0.000000 +vt 0.125000 0.000000 +vt 0.000000 0.000000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.312500 +vt 0.000000 0.312500 +vt 0.000000 0.187500 +vt 0.125000 0.187500 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.312500 +vt 0.000000 0.312500 +vt 0.000000 0.187500 +vt 0.125000 0.187500 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.062500 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.000000 0.062500 +vt 0.125000 0.062500 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.000000 0.062500 +vt 0.125000 0.000000 +vt 0.000000 0.000000 +vt 0.125000 0.000000 +vt 0.000000 0.000000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.312500 +vt 0.000000 0.312500 +vt 0.000000 0.187500 +vt 0.125000 0.187500 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vn 0.8944 0.0000 -0.4472 +vn 0.0000 0.8944 -0.4472 +vn 0.0000 1.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 -0.8944 -0.4472 +vn -0.8944 0.0000 -0.4472 +usemtl None +s off +f 99/277/16 100/278/16 98/279/16 97/280/16 +f 97/281/17 98/282/17 103/283/17 104/284/17 +f 108/285/18 97/281/18 104/284/18 112/286/18 +f 106/287/19 99/277/19 97/280/19 108/288/19 +f 110/289/20 101/290/20 99/291/20 106/292/20 +f 98/293/18 107/294/18 111/295/18 103/296/18 +f 102/297/20 109/298/20 105/299/20 100/300/20 +f 103/301/21 111/302/21 109/303/21 102/304/21 +f 100/305/19 105/306/19 107/307/19 98/308/19 +f 110/309/22 106/310/22 108/311/22 112/312/22 +f 122/313/21 114/314/21 116/315/21 123/316/21 +f 123/317/20 116/318/20 120/319/20 125/320/20 +f 125/321/19 120/322/19 118/323/19 127/324/19 +f 127/325/18 118/326/18 114/327/18 122/328/18 +f 115/329/22 119/330/22 117/331/22 113/332/22 +f 117/333/18 128/334/18 121/335/18 113/336/18 +f 128/334/17 127/337/17 122/338/17 121/335/17 +f 119/339/19 126/340/19 128/341/19 117/342/19 +f 126/340/16 125/343/16 127/344/16 128/341/16 +f 115/345/20 124/346/20 126/347/20 119/348/20 +f 124/346/23 123/349/23 125/350/23 126/347/23 +f 113/351/21 121/352/21 124/353/21 115/354/21 +f 121/352/24 122/355/24 123/356/24 124/353/24 +f 101/290/23 102/357/23 100/358/23 99/291/23 +f 112/359/21 104/360/21 101/361/21 110/362/21 +f 104/360/24 103/363/24 102/364/24 101/361/24 +f 131/365/16 132/366/16 130/367/16 129/368/16 +f 129/369/17 130/370/17 135/371/17 136/372/17 +f 140/373/18 129/369/18 136/372/18 144/374/18 +f 138/375/19 131/365/19 129/368/19 140/376/19 +f 142/377/20 133/378/20 131/379/20 138/380/20 +f 130/381/18 139/382/18 143/383/18 135/384/18 +f 134/385/20 141/386/20 137/387/20 132/388/20 +f 135/389/21 143/390/21 141/391/21 134/392/21 +f 132/393/19 137/394/19 139/395/19 130/396/19 +f 142/397/22 138/398/22 140/399/22 144/400/22 +f 133/378/23 134/401/23 132/402/23 131/379/23 +f 144/403/21 136/404/21 133/405/21 142/406/21 +f 136/404/24 135/407/24 134/408/24 133/405/24 diff --git a/src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_edge_outside.obj b/src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_edge_outside.obj new file mode 100644 index 0000000..6ed2247 --- /dev/null +++ b/src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_edge_outside.obj @@ -0,0 +1,207 @@ +# Blender v2.79 (sub 0) OBJ File: 'busbar.blend' +# www.blender.org +mtllib busmaterial.mtl +o busbar_edge_outside +v 0.437500 0.187500 1.000000 +v 0.437500 0.250000 1.000000 +v 0.125000 0.187500 0.812500 +v 0.437500 0.250000 0.750000 +v 0.562500 0.187500 1.000000 +v 0.562500 0.250000 1.000000 +v 0.562500 0.187500 0.750000 +v 0.250000 0.250000 0.812500 +v 0.562500 0.250000 0.812500 +v 0.437500 0.187500 0.812500 +v 0.562500 0.250000 0.750000 +v 0.250000 0.187500 0.750000 +v 0.250000 0.250000 1.000000 +v 0.437500 0.187500 0.750000 +v 0.250000 0.187500 1.000000 +v 0.437500 0.250000 0.812500 +v 0.125000 0.250000 0.750000 +v 0.125000 0.250000 1.000000 +v 0.562500 0.187500 0.812500 +v 0.125000 0.187500 1.000000 +v 0.250000 0.250000 0.750000 +v 0.125000 0.187500 0.750000 +v 0.125000 0.250000 0.812500 +v 0.250000 0.187500 0.812500 +v 0.250000 0.000000 0.812500 +v 0.125000 0.000000 0.750000 +v 0.250000 0.000000 0.750000 +v 0.750000 0.187500 0.812500 +v 0.875000 0.250000 0.812500 +v 0.875000 0.187500 0.750000 +v 0.875000 0.250000 1.000000 +v 0.875000 0.187500 1.000000 +v 0.750000 0.250000 0.750000 +v 0.750000 0.250000 1.000000 +v 0.750000 0.187500 1.000000 +v 0.875000 0.250000 0.750000 +v 0.750000 0.187500 0.750000 +v 0.750000 0.250000 0.812500 +v 0.875000 0.187500 0.812500 +v 0.750000 0.000000 0.750000 +v 0.437500 0.000000 0.812500 +v 0.437500 0.000000 0.750000 +v 0.562500 0.000000 0.812500 +v 0.562500 0.000000 0.750000 +v 0.125000 0.000000 0.812500 +v 0.750000 0.000000 0.812500 +v 0.875000 0.000000 0.812500 +v 0.875000 0.000000 0.750000 +vt 0.187500 0.812500 +vt 0.250000 0.812500 +vt 0.250000 0.875000 +vt 0.187500 0.875000 +vt 0.000000 0.812500 +vt 0.000000 0.875000 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.312500 0.875000 +vt 0.312500 0.812500 +vt 0.000000 0.812500 +vt 0.187500 0.812500 +vt 0.187500 0.875000 +vt 0.000000 0.875000 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.312500 0.875000 +vt 0.312500 0.812500 +vt 0.250000 0.812500 +vt 0.250000 0.875000 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vt 0.187500 0.875000 +vt 0.187500 1.000000 +vt 0.000000 1.000000 +vt 0.187500 1.000000 +vt 0.250000 1.000000 +vt 0.812500 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.812500 0.875000 +vt 0.750000 0.812500 +vt 0.750000 0.875000 +vt 0.750000 0.875000 +vt 0.562500 0.875000 +vt 0.562500 0.812500 +vt 0.750000 0.812500 +vt 0.250000 0.875000 +vt 0.437500 0.875000 +vt 0.437500 1.000000 +vt 0.250000 1.000000 +vt 0.250000 0.812500 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.250000 0.875000 +vt 0.437500 1.000000 +vt 0.250000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vt 0.187500 0.875000 +vt 0.187500 1.000000 +vt 0.000000 1.000000 +vt 0.187500 1.000000 +vt 0.250000 1.000000 +vt 0.812500 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.812500 0.875000 +vt 0.750000 0.812500 +vt 0.750000 0.875000 +vt 0.750000 0.875000 +vt 0.562500 0.875000 +vt 0.562500 0.812500 +vt 0.750000 0.812500 +vt 0.250000 0.875000 +vt 0.437500 0.875000 +vt 0.437500 1.000000 +vt 0.250000 1.000000 +vt 0.250000 0.812500 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.250000 0.875000 +vt 0.437500 1.000000 +vt 0.250000 1.000000 +vt 0.187500 0.812500 +vt 0.250000 0.812500 +vt 0.250000 0.875000 +vt 0.187500 0.875000 +vt 0.000000 0.812500 +vt 0.000000 0.875000 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.312500 0.875000 +vt 0.312500 0.812500 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vt 0.187500 0.875000 +vt 0.187500 1.000000 +vt 0.000000 1.000000 +vt 0.187500 1.000000 +vt 0.250000 1.000000 +vt 0.812500 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.812500 0.875000 +vt 0.750000 0.812500 +vt 0.750000 0.875000 +vt 0.750000 0.875000 +vt 0.562500 0.875000 +vt 0.562500 0.812500 +vt 0.750000 0.812500 +vt 0.250000 0.875000 +vt 0.437500 0.875000 +vt 0.437500 1.000000 +vt 0.250000 1.000000 +vt 0.250000 0.812500 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.250000 0.875000 +vt 0.437500 1.000000 +vt 0.250000 1.000000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +usemtl None +s off +f 24/1/1 12/2/1 21/3/1 8/4/1 +f 15/5/1 24/1/1 8/4/1 13/6/1 +f 22/7/2 17/8/2 21/9/2 12/10/2 +f 5/11/1 19/12/1 9/13/1 6/14/1 +f 14/15/2 4/16/2 11/17/2 7/18/2 +f 19/12/1 7/19/1 11/20/1 9/13/1 +f 5/21/3 1/22/3 10/23/3 19/24/3 +f 2/25/4 6/14/4 9/13/4 16/26/4 +f 11/20/4 4/27/4 16/26/4 9/13/4 +f 10/28/5 1/29/5 2/30/5 16/31/5 +f 14/32/5 10/28/5 16/31/5 4/33/5 +f 14/34/5 42/35/5 41/36/5 10/37/5 +f 10/38/6 41/39/6 43/40/6 19/41/6 +f 19/42/1 43/43/1 44/44/1 7/45/1 +f 42/46/2 14/47/2 7/45/2 44/44/2 +f 15/48/3 20/49/3 3/50/3 24/51/3 +f 18/52/4 13/6/4 8/4/4 23/53/4 +f 21/3/4 17/54/4 23/53/4 8/4/4 +f 3/55/5 20/56/5 18/57/5 23/58/5 +f 22/59/5 3/55/5 23/58/5 17/60/5 +f 22/61/5 26/62/5 45/63/5 3/64/5 +f 3/65/6 45/66/6 25/67/6 24/68/6 +f 24/69/1 25/70/1 27/71/1 12/72/1 +f 26/73/2 22/74/2 12/72/2 27/71/2 +f 39/75/1 30/76/1 36/77/1 29/78/1 +f 32/79/1 39/75/1 29/78/1 31/80/1 +f 37/81/2 33/82/2 36/83/2 30/84/2 +f 32/85/3 35/86/3 28/87/3 39/88/3 +f 34/89/4 31/80/4 29/78/4 38/90/4 +f 36/77/4 33/91/4 38/90/4 29/78/4 +f 28/92/5 35/93/5 34/94/5 38/95/5 +f 37/96/5 28/92/5 38/95/5 33/97/5 +f 37/98/5 40/99/5 46/100/5 28/101/5 +f 28/102/6 46/103/6 47/104/6 39/105/6 +f 39/106/1 47/107/1 48/108/1 30/109/1 +f 40/110/2 37/111/2 30/109/2 48/108/2 diff --git a/src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_lv_a.obj b/src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_lv_a.obj new file mode 100644 index 0000000..f83c913 --- /dev/null +++ b/src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_lv_a.obj @@ -0,0 +1,60 @@ +# Blender v2.79 (sub 0) OBJ File: 'busbar.blend' +# www.blender.org +mtllib busmaterial.mtl +o busconnector_lv_a +v 0.125000 0.281250 0.562500 +v 0.125000 0.343750 0.562500 +v -0.312500 0.281250 0.562500 +v -0.312500 0.343750 0.562500 +v 0.125000 0.281250 0.437500 +v 0.125000 0.343750 0.437500 +v -0.312500 0.281250 0.437500 +v -0.312500 0.343750 0.437500 +v 0.156250 0.250000 0.562500 +v 0.218750 0.250000 0.562500 +v 0.218750 0.250000 0.437500 +v 0.156250 0.250000 0.437500 +vt 1.000000 0.875000 +vt 1.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vt 0.437500 0.875000 +vt 0.437500 1.000000 +vt 0.000000 0.812500 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.000000 0.875000 +vt 0.437500 1.000000 +vt 0.000000 1.000000 +vt 0.125000 0.875000 +vt 0.125000 1.000000 +vt 0.250000 1.000000 +vt 0.250000 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 0.062500 0.875000 +vt 0.062500 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vn -0.0000 0.0000 1.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 1.0000 0.0000 +vn 0.7071 0.7071 0.0000 +vn -0.7071 -0.7071 0.0000 +usemtl None +s off +f 2/1/1 1/2/1 9/3/1 10/4/1 +f 5/5/2 1/6/2 3/7/2 7/8/2 +f 3/9/1 1/10/1 2/11/1 4/12/1 +f 5/13/3 7/14/3 8/15/3 6/16/3 +f 8/15/4 4/17/4 2/18/4 6/16/4 +f 6/19/5 2/20/5 10/21/5 11/22/5 +f 5/13/3 6/16/3 11/23/3 12/24/3 +f 1/25/6 5/26/6 12/27/6 9/28/6 diff --git a/src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_lv_b.obj b/src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_lv_b.obj new file mode 100644 index 0000000..00165d7 --- /dev/null +++ b/src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_lv_b.obj @@ -0,0 +1,60 @@ +# Blender v2.79 (sub 0) OBJ File: 'busbar.blend' +# www.blender.org +mtllib busmaterial.mtl +o busconnector_lv_b +v 0.437500 0.281250 0.562500 +v 0.437500 0.343750 0.562500 +v -0.312500 0.281250 0.562500 +v -0.312500 0.343750 0.562500 +v 0.437500 0.281250 0.437500 +v 0.437500 0.343750 0.437500 +v -0.312500 0.281250 0.437500 +v -0.312500 0.343750 0.437500 +v 0.468750 0.250000 0.562500 +v 0.531250 0.250000 0.562500 +v 0.531250 0.250000 0.437500 +v 0.468750 0.250000 0.437500 +vt 1.000000 0.875000 +vt 1.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vt 0.750000 0.875000 +vt 0.750000 1.000000 +vt 0.000000 0.812500 +vt 0.750000 0.812500 +vt 0.750000 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 0.750000 0.812500 +vt 0.750000 0.875000 +vt 0.000000 0.875000 +vt 0.750000 1.000000 +vt 0.000000 1.000000 +vt 0.125000 0.875000 +vt 0.125000 1.000000 +vt 0.250000 1.000000 +vt 0.250000 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 0.062500 0.875000 +vt 0.062500 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vn -0.0000 0.0000 1.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 1.0000 0.0000 +vn 0.7071 0.7071 0.0000 +vn -0.7071 -0.7071 0.0000 +usemtl None +s off +f 2/1/1 1/2/1 9/3/1 10/4/1 +f 5/5/2 1/6/2 3/7/2 7/8/2 +f 3/9/1 1/10/1 2/11/1 4/12/1 +f 5/13/3 7/14/3 8/15/3 6/16/3 +f 8/15/4 4/17/4 2/18/4 6/16/4 +f 6/19/5 2/20/5 10/21/5 11/22/5 +f 5/13/3 6/16/3 11/23/3 12/24/3 +f 1/25/6 5/26/6 12/27/6 9/28/6 diff --git a/src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_lv_c.obj b/src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_lv_c.obj new file mode 100644 index 0000000..87d52dc --- /dev/null +++ b/src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_lv_c.obj @@ -0,0 +1,82 @@ +# Blender v2.79 (sub 0) OBJ File: 'busbar.blend' +# www.blender.org +mtllib busmaterial.mtl +o busconnector_lv_c +v 0.750000 0.281250 0.562500 +v 0.750000 0.343750 0.562500 +v -0.312500 0.281250 0.562500 +v -0.312500 0.343750 0.562500 +v 0.750000 0.281250 0.437500 +v 0.750000 0.343750 0.437500 +v -0.312500 0.281250 0.437500 +v -0.312500 0.343750 0.437500 +v 0.781250 0.250000 0.562500 +v 0.843750 0.250000 0.562500 +v 0.843750 0.250000 0.437500 +v 0.781250 0.250000 0.437500 +v 0.187500 0.281250 0.562500 +v 0.187500 0.343750 0.562500 +v 0.187500 0.281250 0.437500 +v 0.187500 0.343750 0.437500 +vt 1.000000 0.875000 +vt 1.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.437500 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.437500 1.000000 +vt 0.125000 0.875000 +vt 0.125000 1.000000 +vt 0.250000 1.000000 +vt 0.250000 0.875000 +vt 0.000000 0.812500 +vt 0.000000 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 0.062500 0.875000 +vt 0.062500 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vt 0.437500 0.812500 +vt 1.000000 0.812500 +vt 0.000000 0.812500 +vt 0.562500 0.812500 +vt 0.562500 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 0.562500 0.812500 +vt 0.562500 0.875000 +vt 0.000000 0.875000 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.437500 1.000000 +vt 0.437500 0.875000 +vt 0.562500 0.875000 +vt 0.562500 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vt 0.000000 1.000000 +vt 0.562500 1.000000 +vn -0.0000 0.0000 1.0000 +vn 0.0000 1.0000 0.0000 +vn 0.7071 0.7071 0.0000 +vn 0.0000 0.0000 -1.0000 +vn -0.7071 -0.7071 0.0000 +vn 0.0000 -1.0000 0.0000 +usemtl None +s off +f 2/1/1 1/2/1 9/3/1 10/4/1 +f 6/5/2 16/6/2 14/7/2 2/8/2 +f 6/9/3 2/10/3 10/11/3 11/12/3 +f 5/13/4 6/14/4 11/15/4 12/16/4 +f 1/17/5 5/18/5 12/19/5 9/20/5 +f 5/21/4 15/22/4 16/6/4 6/5/4 +f 15/23/4 7/24/4 8/25/4 16/26/4 +f 3/27/1 13/28/1 14/29/1 4/30/1 +f 13/31/1 1/2/1 2/1/1 14/32/1 +f 13/33/6 15/34/6 5/35/6 1/36/6 +f 3/37/6 7/38/6 15/39/6 13/40/6 +f 14/41/2 16/26/2 8/25/2 4/42/2 diff --git a/src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_mv_a.obj b/src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_mv_a.obj new file mode 100644 index 0000000..606e94b --- /dev/null +++ b/src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_mv_a.obj @@ -0,0 +1,84 @@ +# Blender v2.79 (sub 0) OBJ File: 'busbar.blend' +# www.blender.org +mtllib busmaterial.mtl +o busconnector_mv_a +v 0.125000 0.343750 0.562500 +v 0.125000 0.406250 0.562500 +v -0.312500 0.343750 0.562500 +v -0.312500 0.406250 0.562500 +v 0.125000 0.343750 0.437500 +v 0.125000 0.406250 0.437500 +v -0.312500 0.343750 0.437500 +v -0.312500 0.406250 0.437500 +v 0.156250 0.312500 0.562500 +v 0.218750 0.312500 0.562500 +v 0.218750 0.312500 0.437500 +v 0.156250 0.312500 0.437500 +v 0.156250 0.250000 0.562500 +v 0.218750 0.250000 0.562500 +v 0.218750 0.250000 0.437500 +v 0.156250 0.250000 0.437500 +vt 1.000000 0.875000 +vt 1.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vt 0.437500 0.875000 +vt 0.437500 1.000000 +vt 0.000000 0.812500 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.000000 0.875000 +vt 0.437500 1.000000 +vt 0.000000 1.000000 +vt 0.062500 0.812500 +vt 0.062500 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 0.125000 0.875000 +vt 0.125000 1.000000 +vt 0.250000 1.000000 +vt 0.250000 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 0.062500 0.875000 +vt 0.062500 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vt 0.125000 0.875000 +vt 0.125000 1.000000 +vt 0.062500 1.000000 +vt 0.062500 0.875000 +vt 0.937500 0.812500 +vt 0.937500 0.875000 +vt 0.187500 0.875000 +vt 0.187500 1.000000 +vt 0.125000 1.000000 +vt 0.125000 0.875000 +vn -0.0000 0.0000 1.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 1.0000 0.0000 +vn 0.7071 0.7071 0.0000 +vn -0.7071 -0.7071 0.0000 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +usemtl None +s off +f 2/1/1 1/2/1 9/3/1 10/4/1 +f 5/5/2 1/6/2 3/7/2 7/8/2 +f 3/9/1 1/10/1 2/11/1 4/12/1 +f 5/13/3 7/14/3 8/15/3 6/16/3 +f 8/15/4 4/17/4 2/18/4 6/16/4 +f 12/19/3 11/20/3 15/21/3 16/22/3 +f 6/23/5 2/24/5 10/25/5 11/26/5 +f 5/13/3 6/16/3 11/27/3 12/28/3 +f 1/29/6 5/30/6 12/31/6 9/32/6 +f 9/33/7 12/34/7 16/35/7 13/36/7 +f 10/4/1 9/3/1 13/37/1 14/38/1 +f 11/39/8 10/40/8 14/41/8 15/42/8 diff --git a/src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_mv_b.obj b/src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_mv_b.obj new file mode 100644 index 0000000..fd7a08d --- /dev/null +++ b/src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_mv_b.obj @@ -0,0 +1,84 @@ +# Blender v2.79 (sub 0) OBJ File: 'busbar.blend' +# www.blender.org +mtllib busmaterial.mtl +o busconnector_mv_b +v 0.437500 0.343750 0.562500 +v 0.437500 0.406250 0.562500 +v -0.312500 0.343750 0.562500 +v -0.312500 0.406250 0.562500 +v 0.437500 0.343750 0.437500 +v 0.437500 0.406250 0.437500 +v -0.312500 0.343750 0.437500 +v -0.312500 0.406250 0.437500 +v 0.468750 0.312500 0.562500 +v 0.531250 0.312500 0.562500 +v 0.531250 0.312500 0.437500 +v 0.468750 0.312500 0.437500 +v 0.468750 0.250000 0.562500 +v 0.531250 0.250000 0.562500 +v 0.531250 0.250000 0.437500 +v 0.468750 0.250000 0.437500 +vt 1.000000 0.875000 +vt 1.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vt 0.750000 0.875000 +vt 0.750000 1.000000 +vt 0.000000 0.812500 +vt 0.750000 0.812500 +vt 0.750000 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 0.750000 0.812500 +vt 0.750000 0.875000 +vt 0.000000 0.875000 +vt 0.750000 1.000000 +vt 0.000000 1.000000 +vt 0.062500 0.812500 +vt 0.062500 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 0.125000 0.875000 +vt 0.125000 1.000000 +vt 0.250000 1.000000 +vt 0.250000 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 0.062500 0.875000 +vt 0.062500 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vt 0.125000 0.875000 +vt 0.125000 1.000000 +vt 0.062500 1.000000 +vt 0.062500 0.875000 +vt 0.937500 0.812500 +vt 0.937500 0.875000 +vt 0.187500 0.875000 +vt 0.187500 1.000000 +vt 0.125000 1.000000 +vt 0.125000 0.875000 +vn -0.0000 0.0000 1.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 1.0000 0.0000 +vn 0.7071 0.7071 0.0000 +vn -0.7071 -0.7071 0.0000 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +usemtl None +s off +f 2/1/1 1/2/1 9/3/1 10/4/1 +f 5/5/2 1/6/2 3/7/2 7/8/2 +f 3/9/1 1/10/1 2/11/1 4/12/1 +f 5/13/3 7/14/3 8/15/3 6/16/3 +f 8/15/4 4/17/4 2/18/4 6/16/4 +f 12/19/3 11/20/3 15/21/3 16/22/3 +f 6/23/5 2/24/5 10/25/5 11/26/5 +f 5/13/3 6/16/3 11/27/3 12/28/3 +f 1/29/6 5/30/6 12/31/6 9/32/6 +f 9/33/7 12/34/7 16/35/7 13/36/7 +f 10/4/1 9/3/1 13/37/1 14/38/1 +f 11/39/8 10/40/8 14/41/8 15/42/8 diff --git a/src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_mv_c.obj b/src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_mv_c.obj new file mode 100644 index 0000000..51e90b1 --- /dev/null +++ b/src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_mv_c.obj @@ -0,0 +1,106 @@ +# Blender v2.79 (sub 0) OBJ File: 'busbar.blend' +# www.blender.org +mtllib busmaterial.mtl +o busconnector_mv_c +v 0.750000 0.343750 0.562500 +v 0.750000 0.406250 0.562500 +v -0.312500 0.343750 0.562500 +v -0.312500 0.406250 0.562500 +v 0.750000 0.343750 0.437500 +v 0.750000 0.406250 0.437500 +v -0.312500 0.343750 0.437500 +v -0.312500 0.406250 0.437500 +v 0.781250 0.312500 0.562500 +v 0.843750 0.312500 0.562500 +v 0.843750 0.312500 0.437500 +v 0.781250 0.312500 0.437500 +v 0.781250 0.250000 0.562500 +v 0.843750 0.250000 0.562500 +v 0.843750 0.250000 0.437500 +v 0.781250 0.250000 0.437500 +v 0.187500 0.343750 0.562500 +v 0.187500 0.406250 0.562500 +v 0.187500 0.343750 0.437500 +v 0.187500 0.406250 0.437500 +vt 1.000000 0.875000 +vt 1.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.437500 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.437500 1.000000 +vt 0.062500 0.812500 +vt 0.062500 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 0.125000 0.875000 +vt 0.125000 1.000000 +vt 0.250000 1.000000 +vt 0.250000 0.875000 +vt 0.000000 0.812500 +vt 0.000000 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 0.062500 0.875000 +vt 0.062500 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vt 0.125000 0.875000 +vt 0.125000 1.000000 +vt 0.062500 1.000000 +vt 0.062500 0.875000 +vt 0.937500 0.812500 +vt 0.937500 0.875000 +vt 0.187500 0.875000 +vt 0.187500 1.000000 +vt 0.125000 1.000000 +vt 0.125000 0.875000 +vt 0.437500 0.812500 +vt 1.000000 0.812500 +vt 0.000000 0.812500 +vt 0.562500 0.812500 +vt 0.562500 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 0.562500 0.812500 +vt 0.562500 0.875000 +vt 0.000000 0.875000 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.437500 1.000000 +vt 0.437500 0.875000 +vt 0.562500 0.875000 +vt 0.562500 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vt 0.000000 1.000000 +vt 0.562500 1.000000 +vn -0.0000 0.0000 1.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.7071 0.7071 0.0000 +vn -0.7071 -0.7071 0.0000 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +usemtl None +s off +f 2/1/1 1/2/1 9/3/1 10/4/1 +f 6/5/2 20/6/2 18/7/2 2/8/2 +f 12/9/3 11/10/3 15/11/3 16/12/3 +f 6/13/4 2/14/4 10/15/4 11/16/4 +f 5/17/3 6/18/3 11/19/3 12/20/3 +f 1/21/5 5/22/5 12/23/5 9/24/5 +f 9/25/6 12/26/6 16/27/6 13/28/6 +f 10/4/1 9/3/1 13/29/1 14/30/1 +f 11/31/7 10/32/7 14/33/7 15/34/7 +f 5/35/3 19/36/3 20/6/3 6/5/3 +f 19/37/3 7/38/3 8/39/3 20/40/3 +f 3/41/1 17/42/1 18/43/1 4/44/1 +f 17/45/1 1/2/1 2/1/1 18/46/1 +f 17/47/8 19/48/8 5/49/8 1/50/8 +f 3/51/8 7/52/8 19/53/8 17/54/8 +f 18/55/2 20/40/2 8/39/2 4/56/2 diff --git a/src/main/resources/assets/overengineered/models/block/obj/busbar/busmaterial.mtl b/src/main/resources/assets/overengineered/models/block/obj/busbar/busmaterial.mtl new file mode 100644 index 0000000..ae6136b --- /dev/null +++ b/src/main/resources/assets/overengineered/models/block/obj/busbar/busmaterial.mtl @@ -0,0 +1,2 @@ +newmtl None +map_Kd #texture diff --git a/src/main/resources/assets/overengineered/textures/block/obj/busbar.png b/src/main/resources/assets/overengineered/textures/block/obj/busbar.png new file mode 100644 index 0000000000000000000000000000000000000000..a560112839ce9ac2afd7d0c260f7075bea5b3bdf GIT binary patch literal 266 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBufiR<}hF1enaK5LDV~BQ2$Qoorh1 z-x7i>4nfbG)X_iFt(a!I3mrV{zG(Wa5ai3d!ZHDD@nXJDN5yG?9 zY~@hQNV;vNJ1r<={p(d~hvx2$?dDh_ZlSt#3GbXEO2waTvW@*+cg=kByUwk?Zr=09 zanrZ?{WL8SWM2QikY{IAcXai>#U5+fo|@J$d*tn3$Md_<-2cDvR#o{qn}AMb@O1Ta JS?83{1ONiEV%z`# literal 0 HcmV?d00001 From 5386fc56243034c5349565667dc439ab304df729 Mon Sep 17 00:00:00 2001 From: TwistedGate <31029668+TwistedGate@users.noreply.github.com> Date: Mon, 22 Aug 2022 17:14:03 +0200 Subject: [PATCH 02/26] Mild Cleanup Recursion problem still exists, and i don't know why and how. And it's realy frustrating and demotivating trying to find *something* that maaay be the cause but always ending up not finding it. --- .../common/blocks/busbar/BusbarBlock.java | 62 ++-- .../common/blocks/busbar/BusbarState.java | 331 ++---------------- 2 files changed, 68 insertions(+), 325 deletions(-) diff --git a/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java b/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java index 71204e6..374db3e 100644 --- a/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java +++ b/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java @@ -40,9 +40,7 @@ public class BusbarBlock extends OEBlockBase implements EntityBlock{ public BusbarBlock(){ super(Block.Properties.of(MATERIAL).strength(2.0F, 10.0F).sound(SoundType.METAL).requiresCorrectToolForDrops()); - registerDefaultState(getStateDefinition().any() - .setValue(SHAPE, EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH) - ); + registerDefaultState(getStateDefinition().any().setValue(SHAPE, EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH)); } @Override @@ -55,12 +53,24 @@ public boolean propagatesSkylightDown(BlockState pState, BlockGetter pLevel, Blo return true; } - public static boolean isBusbar(Level level, BlockPos pos){ - return isBusbar(level.getBlockState(pos)); - } - - public static boolean isBusbar(BlockState state){ - return state.getBlock() instanceof BusbarBlock; + @Override + public BlockState getStateForPlacement(BlockPlaceContext pContext){ + Direction direction = pContext.getHorizontalDirection(); + Direction face = pContext.getClickedFace(); + + // @formatter:off + EnumBusbarShape shape = switch(face){ + case DOWN -> (direction == Direction.EAST || direction == Direction.WEST) ? EnumBusbarShape.INSULATORS_UP_EAST_WEST : EnumBusbarShape.INSULATORS_UP_NORTH_SOUTH; + case UP -> (direction == Direction.EAST || direction == Direction.WEST) ? EnumBusbarShape.INSULATORS_DOWN_EAST_WEST : EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH; + case NORTH -> EnumBusbarShape.INSULATORS_SOUTH_UP_DOWN; + case EAST -> EnumBusbarShape.INSULATORS_WEST_UP_DOWN; + case SOUTH -> EnumBusbarShape.INSULATORS_NORTH_UP_DOWN; + case WEST -> EnumBusbarShape.INSULATORS_EAST_UP_DOWN; + default -> EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH; + }; + // @formatter:on + + return defaultBlockState().setValue(SHAPE, shape); } @Override @@ -87,24 +97,6 @@ public InteractionResult use(BlockState pState, Level pLevel, BlockPos pPos, Pla return InteractionResult.PASS; } - @Override - public BlockState getStateForPlacement(BlockPlaceContext pContext){ - Direction direction = pContext.getHorizontalDirection(); - Direction face = pContext.getClickedFace(); - - EnumBusbarShape shape = switch(face){ - case DOWN -> (direction == Direction.EAST || direction == Direction.WEST) ? EnumBusbarShape.INSULATORS_UP_EAST_WEST : EnumBusbarShape.INSULATORS_UP_NORTH_SOUTH; - case UP -> (direction == Direction.EAST || direction == Direction.WEST) ? EnumBusbarShape.INSULATORS_DOWN_EAST_WEST : EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH; - case NORTH -> EnumBusbarShape.INSULATORS_SOUTH_UP_DOWN; - case EAST -> EnumBusbarShape.INSULATORS_WEST_UP_DOWN; - case SOUTH -> EnumBusbarShape.INSULATORS_NORTH_UP_DOWN; - case WEST -> EnumBusbarShape.INSULATORS_EAST_UP_DOWN; - default -> EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH; - }; - - return defaultBlockState().setValue(SHAPE, shape); - } - @Override public void setPlacedBy(Level level, BlockPos pos, BlockState state, LivingEntity placer, ItemStack stack){ } @@ -117,12 +109,12 @@ public void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldS private BlockState updateDir(Level level, BlockPos pos, BlockState state, boolean placing){ if(level.isClientSide){ return state; - }else{ - EnumBusbarShape shape = state.getValue(SHAPE); - return new BusbarState(level, pos, state).place(placing, shape).getState(); } + + EnumBusbarShape shape = state.getValue(SHAPE); + return new BusbarState(level, pos, state).place(placing, shape).getState(); } - + @Override public void neighborChanged(BlockState stateIn, Level levelIn, BlockPos posIn, Block lastBlockIn, BlockPos fromPosIn, boolean isMovingIn){ } @@ -178,4 +170,12 @@ public VoxelShape getShape(BlockState pState, BlockGetter pLevel, BlockPos pPos, } // @formatter:on } + + public static boolean isBusbar(Level level, BlockPos pos){ + return isBusbar(level.getBlockState(pos)); + } + + public static boolean isBusbar(BlockState state){ + return state.getBlock() instanceof BusbarBlock; + } } diff --git a/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarState.java b/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarState.java index bf908b3..aea2d3e 100644 --- a/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarState.java +++ b/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarState.java @@ -7,11 +7,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.BaseRailBlock; -import net.minecraft.world.level.block.RailBlock; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.state.properties.RailShape; -import twistedgate.overengineered.OverEngineered; import twistedgate.overengineered.utils.enums.EnumBusbarShape; public class BusbarState{ @@ -32,45 +28,29 @@ public BusbarState(Level pLevel, BlockPos pPos, BlockState pState){ updateConnections(shape); } - private boolean canConnectTo(BusbarState busState){ - return connectsTo(busState) || this.connections.size() != 2; - } - - private boolean connectsTo(BusbarState busState){ - return hasConnection(busState.pos); - } - @Nullable private BusbarState getBus(BlockPos pos){ BlockState blockState = this.level.getBlockState(pos); - // TODO May need special cases for edges. (Left "original" below) + // TODO May need special cases for edges return BusbarBlock.isBusbar(blockState) ? new BusbarState(this.level, pos, blockState) : null; - - /* - if(BusbarBlock.isBusbar(blockState)){ - return new BusbarState(this.level, pos, blockState); - }else{ - BlockPos other = pos.above(); - blockState = this.level.getBlockState(other); - if(BusbarBlock.isBusbar(blockState)){ - return new BusbarState(this.level, other, blockState); - }else{ - other = pos.below(); - blockState = this.level.getBlockState(other); - return BusbarBlock.isBusbar(blockState) ? new BusbarState(this.level, other, blockState) : null; - } - } - */ } public BlockState getState(){ return this.state; } + private boolean canConnectTo(BusbarState busState){ + return connectsTo(busState) || this.connections.size() != 2; + } + + private boolean connectsTo(BusbarState busState){ + return hasConnection(busState.pos); + } + private boolean hasConnection(BlockPos pos){ for(int i = 0;i < this.connections.size();++i){ BlockPos blockpos = this.connections.get(i); - if(blockpos.getX() == pos.getX() && blockpos.getZ() == pos.getZ()){ + if(blockpos.equals(pos)){ return true; } } @@ -87,20 +67,21 @@ private boolean hasNeighborBus(BlockPos pos){ return busState.canConnectTo(this); } + @SuppressWarnings("unused") public BusbarState place(boolean placing, EnumBusbarShape shapeIn){ - BlockPos posDown = this.pos.below(); - BlockPos posUp = this.pos.above(); - BlockPos posNorth = this.pos.north(); - BlockPos posEast = this.pos.east(); - BlockPos posSouth = this.pos.south(); - BlockPos posWest = this.pos.west(); - - boolean hasDown = hasNeighborBus(posDown); - boolean hasUp = hasNeighborBus(posUp); - boolean hasNorth = hasNeighborBus(posNorth); - boolean hasEast = hasNeighborBus(posEast); - boolean hasSouth = hasNeighborBus(posSouth); - boolean hasWest = hasNeighborBus(posWest); + final BlockPos posDown = this.pos.below(); + final BlockPos posUp = this.pos.above(); + final BlockPos posNorth = this.pos.north(); + final BlockPos posEast = this.pos.east(); + final BlockPos posSouth = this.pos.south(); + final BlockPos posWest = this.pos.west(); + + final boolean hasDown = hasNeighborBus(posDown); + final boolean hasUp = hasNeighborBus(posUp); + final boolean hasNorth = hasNeighborBus(posNorth); + final boolean hasEast = hasNeighborBus(posEast); + final boolean hasSouth = hasNeighborBus(posSouth); + final boolean hasWest = hasNeighborBus(posWest); EnumBusbarShape shape = null; @@ -188,162 +169,23 @@ public BusbarState place(boolean placing, EnumBusbarShape shapeIn){ return this; } - /** Temporary, just for peaking */ - @Deprecated(forRemoval = true) - public void /*RailState*/ place(){ - boolean pPowered = false, pPlaceBlock = false, canMakeSlopes = false; - RailShape pShape = null; - // Above would be the method args - //------------------------------------------------------------------------- - - BlockPos posNorth = this.pos.north(); - BlockPos posSouth = this.pos.south(); - BlockPos posWest = this.pos.west(); - BlockPos posEast = this.pos.east(); - boolean hasNorth = this.hasNeighborBus(posNorth); - boolean hasSouth = this.hasNeighborBus(posSouth); - boolean hasWest = this.hasNeighborBus(posWest); - boolean hasEast = this.hasNeighborBus(posEast); - boolean ns = hasNorth || hasSouth; - boolean ew = hasWest || hasEast; - - RailShape railshape = null; - - if(ns && !ew){ - railshape = RailShape.NORTH_SOUTH; - } - - if(ew && !ns){ - railshape = RailShape.EAST_WEST; - } - - boolean se = hasSouth && hasEast; - boolean sw = hasSouth && hasWest; - boolean ne = hasNorth && hasEast; - boolean nw = hasNorth && hasWest; - if(!this.isStraight){ - if(se && !hasNorth && !hasWest){ - railshape = RailShape.SOUTH_EAST; - } - - if(sw && !hasNorth && !hasEast){ - railshape = RailShape.SOUTH_WEST; - } - - if(nw && !hasSouth && !hasEast){ - railshape = RailShape.NORTH_WEST; - } - - if(ne && !hasSouth && !hasWest){ - railshape = RailShape.NORTH_EAST; - } - } - - if(railshape == null){ - if(ns && ew){ - railshape = pShape; - }else if(ns){ - railshape = RailShape.NORTH_SOUTH; - }else if(ew){ - railshape = RailShape.EAST_WEST; - } - - if(!this.isStraight){ - if(pPowered){ - if(se){ - railshape = RailShape.SOUTH_EAST; - } - - if(sw){ - railshape = RailShape.SOUTH_WEST; - } - - if(ne){ - railshape = RailShape.NORTH_EAST; - } - - if(nw){ - railshape = RailShape.NORTH_WEST; - } - }else{ - if(nw){ - railshape = RailShape.NORTH_WEST; - } - - if(ne){ - railshape = RailShape.NORTH_EAST; - } - - if(sw){ - railshape = RailShape.SOUTH_WEST; - } - - if(se){ - railshape = RailShape.SOUTH_EAST; - } - } - } - } - - if(railshape == RailShape.NORTH_SOUTH && canMakeSlopes){ - if(BaseRailBlock.isRail(this.level, posNorth.above())){ - railshape = RailShape.ASCENDING_NORTH; - } - - if(BaseRailBlock.isRail(this.level, posSouth.above())){ - railshape = RailShape.ASCENDING_SOUTH; - } - } - - if(railshape == RailShape.EAST_WEST && canMakeSlopes){ - if(BaseRailBlock.isRail(this.level, posEast.above())){ - railshape = RailShape.ASCENDING_EAST; - } - - if(BaseRailBlock.isRail(this.level, posWest.above())){ - railshape = RailShape.ASCENDING_WEST; - } - } - - if(railshape == null){ - railshape = pShape; - } - - //updateConnections(railshape); - this.state = this.state.setValue(RailBlock.SHAPE, railshape); - if(pPlaceBlock || this.level.getBlockState(this.pos) != this.state){ - this.level.setBlock(this.pos, this.state, 3); - - for(int i = 0;i < this.connections.size();++i){ - BusbarState busState = getBus(this.connections.get(i)); - if(busState != null){ - busState.removeSoftConnections(); - if(busState.canConnectTo(this)){ - busState.connectTo(this); - } - } - } - } - - //return this; - } - + @SuppressWarnings("unused") private void connectTo(BusbarState state){ this.connections.add(state.pos); - BlockPos posDown = this.pos.below(); - BlockPos posUp = this.pos.above(); - BlockPos posNorth = this.pos.north(); - BlockPos posEast = this.pos.east(); - BlockPos posSouth = this.pos.south(); - BlockPos posWest = this.pos.west(); + final BlockPos posDown = this.pos.below(); + final BlockPos posUp = this.pos.above(); + final BlockPos posNorth = this.pos.north(); + final BlockPos posEast = this.pos.east(); + final BlockPos posSouth = this.pos.south(); + final BlockPos posWest = this.pos.west(); - boolean conDown = hasConnection(posDown); - boolean conUp = hasConnection(posUp); - boolean conNorth = hasConnection(posNorth); - boolean conSouth = hasConnection(posSouth); - boolean conWest = hasConnection(posWest); - boolean conEast = hasConnection(posEast); + final boolean conDown = hasConnection(posDown); + final boolean conUp = hasConnection(posUp); + final boolean conNorth = hasConnection(posNorth); + final boolean conSouth = hasConnection(posSouth); + final boolean conWest = hasConnection(posWest); + final boolean conEast = hasConnection(posEast); EnumBusbarShape shape = null; @@ -376,108 +218,9 @@ private void connectTo(BusbarState state){ shape = EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH; } - OverEngineered.log.debug( - "DEBUG\r\nconnectTo(\r\n\t" + - "Level: {}\r\n\t" + - "BlockState: {}\r\n\t" + - "Pos: {}\r\n\t" + - "Connections: {}\r\n)"+ - "{\r\n\t" + - "Level: {}\r\n\t" + - "State: {}\r\n\t" + - "Pos: {}\r\n\t" + - "Connections: {}\r\n\t" + - "Shape: {}\r\n" + - "}", - state.level, - state.state, - state.pos, - state.connections, - - this.level, - this.state, - this.pos, - this.connections, - shape - ); - this.state = this.state.setValue(BusbarBlock.SHAPE, shape); this.level.setBlock(this.pos, this.state, 3); } - - /** Temporary, just for peaking */ - @SuppressWarnings({"null", "unused"}) - @Deprecated(forRemoval = true) - private void connectTo(){ - BusbarState pState = null; - // Above would be the method args - //------------------------------------------------------------------------- - - this.connections.add(pState.pos); - BlockPos posNorth = this.pos.north(); - BlockPos posSouth = this.pos.south(); - BlockPos posWest = this.pos.west(); - BlockPos posEast = this.pos.east(); - boolean conNorth = hasConnection(posNorth); - boolean conSouth = hasConnection(posSouth); - boolean conWest = hasConnection(posWest); - boolean conEast = hasConnection(posEast); - RailShape shape = null; - if(conNorth || conSouth){ - shape = RailShape.NORTH_SOUTH; - } - - if(conWest || conEast){ - shape = RailShape.EAST_WEST; - } - - if(!this.isStraight){ - if(conSouth && conEast && !conNorth && !conWest){ - shape = RailShape.SOUTH_EAST; - } - - if(conSouth && conWest && !conNorth && !conEast){ - shape = RailShape.SOUTH_WEST; - } - - if(conNorth && conWest && !conSouth && !conEast){ - shape = RailShape.NORTH_WEST; - } - - if(conNorth && conEast && !conSouth && !conWest){ - shape = RailShape.NORTH_EAST; - } - } - - /* - if(railshape == RailShape.NORTH_SOUTH && canMakeSlopes){ - if(BaseRailBlock.isRail(this.level, blockpos.above())){ - railshape = RailShape.ASCENDING_NORTH; - } - - if(BaseRailBlock.isRail(this.level, blockpos1.above())){ - railshape = RailShape.ASCENDING_SOUTH; - } - } - - if(railshape == RailShape.EAST_WEST && canMakeSlopes){ - if(BaseRailBlock.isRail(this.level, blockpos3.above())){ - railshape = RailShape.ASCENDING_EAST; - } - - if(BaseRailBlock.isRail(this.level, blockpos2.above())){ - railshape = RailShape.ASCENDING_WEST; - } - } - */ - - if(shape == null){ - shape = RailShape.NORTH_SOUTH; - } - -// this.state = this.state.setValue(BusbarBlock.SHAPE, railshape); -// this.level.setBlock(this.pos, this.state, 3); - } private void removeSoftConnections(){ for(int i = 0;i < this.connections.size();i++){ From 9b566eff7820c837f0f62f50c2be4688312389da Mon Sep 17 00:00:00 2001 From: TwistedGate <31029668+TwistedGate@users.noreply.github.com> Date: Tue, 23 Aug 2022 14:29:28 +0200 Subject: [PATCH 03/26] Fix recursion problem Don't know how this ended up fixing exactly, but.. i have to thank malte yet again for giving me pointers --- .../overengineered/client/ClientProxy.java | 2 +- .../common/blocks/busbar/BusbarBlock.java | 15 ++++++++++----- .../common/blocks/busbar/BusbarState.java | 2 +- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/main/java/twistedgate/overengineered/client/ClientProxy.java b/src/main/java/twistedgate/overengineered/client/ClientProxy.java index ee576ec..5ab7cf3 100644 --- a/src/main/java/twistedgate/overengineered/client/ClientProxy.java +++ b/src/main/java/twistedgate/overengineered/client/ClientProxy.java @@ -28,7 +28,7 @@ public void postInit(){ @Override public void completed(ParallelDispatchEvent event){ - // TODO Soon™ + // TODO Soonâ„¢ //setupManualPages(); } diff --git a/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java b/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java index 374db3e..b1a0886 100644 --- a/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java +++ b/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java @@ -103,7 +103,16 @@ public void setPlacedBy(Level level, BlockPos pos, BlockState state, LivingEntit @Override public void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean isMoving){ - state = updateDir(level, pos, state, true); + if(!oldState.is(state.getBlock())){ + state = updateDir(level, pos, state, true); + } + } + + @Override + public void neighborChanged(BlockState state, Level level, BlockPos pos, Block lastBlock, BlockPos fromPos, boolean isMoving){ + if(!level.isClientSide && level.getBlockState(pos).is(this)){ + state = updateDir(level, pos, state, false); + } } private BlockState updateDir(Level level, BlockPos pos, BlockState state, boolean placing){ @@ -115,10 +124,6 @@ private BlockState updateDir(Level level, BlockPos pos, BlockState state, boolea return new BusbarState(level, pos, state).place(placing, shape).getState(); } - @Override - public void neighborChanged(BlockState stateIn, Level levelIn, BlockPos posIn, Block lastBlockIn, BlockPos fromPosIn, boolean isMovingIn){ - } - @Override public BlockEntity newBlockEntity(BlockPos pPos, BlockState pState){ BusbarTileEntity te = OETileTypes.BUS.get().create(pPos, pState); diff --git a/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarState.java b/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarState.java index aea2d3e..9a73b3d 100644 --- a/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarState.java +++ b/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarState.java @@ -23,7 +23,7 @@ public BusbarState(Level pLevel, BlockPos pPos, BlockState pState){ EnumBusbarShape shape = this.state.getValue(BusbarBlock.SHAPE); - this.isStraight = !EnumBusbarShape.Type.STRAIGHT_SEGMENTS.contains(shape); + this.isStraight = false;//!EnumBusbarShape.Type.STRAIGHT_SEGMENTS.contains(shape); updateConnections(shape); } From 29430980aabdbefd972daab5c2540d1847d44065 Mon Sep 17 00:00:00 2001 From: TwistedGate <31029668+TwistedGate@users.noreply.github.com> Date: Wed, 24 Aug 2022 22:28:24 +0200 Subject: [PATCH 04/26] =?UTF-8?q?Crouching=20rotates=20by=2090=C2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/blocks/busbar/BusbarBlock.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java b/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java index b1a0886..b78c495 100644 --- a/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java +++ b/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java @@ -57,15 +57,16 @@ public boolean propagatesSkylightDown(BlockState pState, BlockGetter pLevel, Blo public BlockState getStateForPlacement(BlockPlaceContext pContext){ Direction direction = pContext.getHorizontalDirection(); Direction face = pContext.getClickedFace(); + boolean crouching = pContext.getPlayer() != null ? pContext.getPlayer().isCrouching() : false; // @formatter:off EnumBusbarShape shape = switch(face){ - case DOWN -> (direction == Direction.EAST || direction == Direction.WEST) ? EnumBusbarShape.INSULATORS_UP_EAST_WEST : EnumBusbarShape.INSULATORS_UP_NORTH_SOUTH; - case UP -> (direction == Direction.EAST || direction == Direction.WEST) ? EnumBusbarShape.INSULATORS_DOWN_EAST_WEST : EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH; - case NORTH -> EnumBusbarShape.INSULATORS_SOUTH_UP_DOWN; - case EAST -> EnumBusbarShape.INSULATORS_WEST_UP_DOWN; - case SOUTH -> EnumBusbarShape.INSULATORS_NORTH_UP_DOWN; - case WEST -> EnumBusbarShape.INSULATORS_EAST_UP_DOWN; + case DOWN -> (direction == Direction.EAST || direction == Direction.WEST) != crouching ? EnumBusbarShape.INSULATORS_UP_EAST_WEST : EnumBusbarShape.INSULATORS_UP_NORTH_SOUTH; + case UP -> (direction == Direction.EAST || direction == Direction.WEST) != crouching ? EnumBusbarShape.INSULATORS_DOWN_EAST_WEST : EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH; + case NORTH -> crouching ? EnumBusbarShape.INSULATORS_SOUTH_EAST_WEST : EnumBusbarShape.INSULATORS_SOUTH_UP_DOWN; + case EAST -> crouching ? EnumBusbarShape.INSULATORS_WEST_NORTH_SOUTH : EnumBusbarShape.INSULATORS_WEST_UP_DOWN; + case SOUTH -> crouching ? EnumBusbarShape.INSULATORS_NORTH_EAST_WEST : EnumBusbarShape.INSULATORS_NORTH_UP_DOWN; + case WEST -> crouching ? EnumBusbarShape.INSULATORS_EAST_NORTH_SOUTH : EnumBusbarShape.INSULATORS_EAST_UP_DOWN; default -> EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH; }; // @formatter:on From db09595688af858f5546220242aad3b02dcc240d Mon Sep 17 00:00:00 2001 From: TwistedGate <31029668+TwistedGate@users.noreply.github.com> Date: Wed, 24 Aug 2022 22:30:30 +0200 Subject: [PATCH 05/26] Cache voxel shapes --- .../common/blocks/busbar/BusbarBlock.java | 123 +++++++++++++----- 1 file changed, 90 insertions(+), 33 deletions(-) diff --git a/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java b/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java index b78c495..9ccc976 100644 --- a/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java +++ b/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java @@ -1,5 +1,9 @@ package twistedgate.overengineered.common.blocks.busbar; +import java.util.HashMap; +import java.util.Map; +import java.util.function.Predicate; + import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.InteractionHand; @@ -26,6 +30,7 @@ import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; +import twistedgate.overengineered.OverEngineered; import twistedgate.overengineered.common.OETileTypes; import twistedgate.overengineered.common.blocks.OEBlockBase; import twistedgate.overengineered.common.blocks.tileentity.BusbarTileEntity; @@ -93,8 +98,13 @@ public InteractionResult use(BlockState pState, Level pLevel, BlockPos pPos, Pla return InteractionResult.SUCCESS; } } - } + + if(pPlayer.getItemInHand(pHand).isEmpty()){ + re_set_shapes = true; + return InteractionResult.SUCCESS; + } + return InteractionResult.PASS; } @@ -136,45 +146,92 @@ public BlockEntityTicker getTicker(Level pLevel, Bloc return createTickerHelper(pLevel.isClientSide, pBlockEntityType, OETileTypes.BUS); } + static final VoxelShape MISSING_SHAPE = Shapes.create(0.125, 0.125, 0.125, 0.875, 0.875, 0.875); + static Map SHAPES_CACHE = makeShapeCache(); + + /** + * @deprecated // TODO To be removed once the Shapes are properly set up + */ + @Deprecated(forRemoval = true) + static boolean re_set_shapes = false; + @Override public VoxelShape getShape(BlockState pState, BlockGetter pLevel, BlockPos pPos, CollisionContext pContext){ - // TODO Cache them, compress and reuse duplicates + if(re_set_shapes){ + SHAPES_CACHE = makeShapeCache(); + re_set_shapes = false; + OverEngineered.log.info("Shapes Re-set."); + } - // @formatter:off - switch(pState.getValue(SHAPE)){ - case INSULATORS_UP_NORTH_SOUTH: case FLOATING_UP_NORTH_SOUTH: { - return Shapes.create(0.125, 0.75, 0.0, 0.875, 1.0, 1.0); - } - case INSULATORS_DOWN_EAST_WEST: case FLOATING_DOWN_EAST_WEST:{ - return Shapes.create(0.0, 0.0, 0.125, 1.0, 0.25, 0.875); - } - case INSULATORS_UP_EAST_WEST: case FLOATING_UP_EAST_WEST:{ - return Shapes.create(0.0, 0.75, 0.125, 1.0, 1.0, 0.875); - } - case INSULATORS_DOWN_NORTH_SOUTH: case FLOATING_DOWN_NORTH_SOUTH:{ - return Shapes.create(0.125, 0.0, 0.0, 0.875, 0.25, 1.0); - } - - case INSULATORS_NORTH_UP_DOWN: return Shapes.create(0.125, 0.0, 0.0, 0.875, 1.0, 0.25); - case INSULATORS_EAST_UP_DOWN: return Shapes.create(0.75, 0.0, 0.125, 1.0, 1.0, 0.875); - case INSULATORS_SOUTH_UP_DOWN: return Shapes.create(0.125, 0.0, 0.75, 0.875, 1.0, 1.0); - case INSULATORS_WEST_UP_DOWN: return Shapes.create(0.0, 0.0, 0.125, 0.25, 1.0, 0.875); - - case BEND_DOWN_NORTH_EAST: return Shapes.create(0.125, 0.0, 0.0, 1.0, 0.25, 0.875); - case BEND_DOWN_EAST_SOUTH: return Shapes.create(0.125, 0.0, 0.125, 1.0, 0.25, 1.0); - case BEND_DOWN_SOUTH_WEST: return Shapes.create(0.0, 0.0, 0.125, 0.875, 0.25, 1.0); - case BEND_DOWN_WEST_NORTH: return Shapes.create(0.0, 0.0, 0.0, 0.875, 0.25, 0.875); + return SHAPES_CACHE.getOrDefault(pState.getValue(SHAPE), MISSING_SHAPE); + } + + private static Map makeShapeCache(){ + Map map = new HashMap<>(); + for(EnumBusbarShape shape:EnumBusbarShape.values()){ - case BEND_UP_NORTH_EAST: return Shapes.create(0.125, 0.75, 0.0, 1.0, 1.0, 0.875); - case BEND_UP_EAST_SOUTH: return Shapes.create(0.125, 0.75, 0.125, 1.0, 1.0, 1.0); - case BEND_UP_SOUTH_WEST: return Shapes.create(0.0, 0.75, 0.125, 0.875, 1.0, 1.0); - case BEND_UP_WEST_NORTH: return Shapes.create(0.0, 0.75, 0.0, 0.875, 1.0, 0.875); + // @formatter:off + VoxelShape vShape = switch(shape){ + case INSULATORS_DOWN_NORTH_SOUTH, FLOATING_DOWN_NORTH_SOUTH -> Shapes.create(0.125, 0.0, 0.0, 0.875, 0.25, 1.0); + case INSULATORS_DOWN_EAST_WEST, FLOATING_DOWN_EAST_WEST -> Shapes.create(0.0, 0.0, 0.125, 1.0, 0.25, 0.875); + case INSULATORS_UP_NORTH_SOUTH, FLOATING_UP_NORTH_SOUTH -> Shapes.create(0.125, 0.75, 0.0, 0.875, 1.0, 1.0); + case INSULATORS_UP_EAST_WEST, FLOATING_UP_EAST_WEST -> Shapes.create(0.0, 0.75, 0.125, 1.0, 1.0, 0.875); + + case INSULATORS_NORTH_UP_DOWN, FLOATING_NORTH_UP_DOWN -> Shapes.create(0.125, 0.0, 0.0, 0.875, 1.0, 0.25); + case INSULATORS_EAST_UP_DOWN, FLOATING_EAST_UP_DOWN -> Shapes.create(0.75, 0.0, 0.125, 1.0, 1.0, 0.875); + case INSULATORS_SOUTH_UP_DOWN, FLOATING_SOUTH_UP_DOWN -> Shapes.create(0.125, 0.0, 0.75, 0.875, 1.0, 1.0); + case INSULATORS_WEST_UP_DOWN, FLOATING_WEST_UP_DOWN -> Shapes.create(0.0, 0.0, 0.125, 0.25, 1.0, 0.875); + + case INSULATORS_NORTH_EAST_WEST, FLOATING_NORTH_EAST_WEST -> Shapes.create(0.0, 0.125, 0.0, 1.0, 0.875, 0.25); + case INSULATORS_SOUTH_EAST_WEST, FLOATING_SOUTH_EAST_WEST -> Shapes.create(0.0, 0.125, 0.75, 1.0, 0.875, 1.0); + case INSULATORS_EAST_NORTH_SOUTH, FLOATING_EAST_NORTH_SOUTH -> Shapes.create(0.75, 0.125, 0.0, 1.0, 0.875, 1.0); + case INSULATORS_WEST_NORTH_SOUTH, FLOATING_WEST_NORTH_SOUTH -> Shapes.create(0.0, 0.125, 0.0, 0.25, 0.875, 1.0); + + case EDGE_INSIDE_DOWN_NORTH_UP_SOUTH -> Shapes.or(Shapes.create(0.125, 0.0, 0.0, 0.875, 0.25, 1.0), Shapes.create(0.125, 0.0, 0.0, 0.875, 1.0, 0.25)).optimize(); + case EDGE_INSIDE_DOWN_SOUTH_UP_NORTH -> Shapes.or(Shapes.create(0.125, 0.0, 0.0, 0.875, 0.25, 1.0), Shapes.create(0.125, 0.0, 0.75, 0.875, 1.0, 1.0)).optimize(); + case EDGE_INSIDE_DOWN_EAST_UP_WEST -> Shapes.or(Shapes.create(0.0, 0.0, 0.125, 1.0, 0.25, 0.875), Shapes.create(0.75, 0.0, 0.125, 1.0, 1.0, 0.875)).optimize(); + case EDGE_INSIDE_DOWN_WEST_UP_EAST -> Shapes.or(Shapes.create(0.0, 0.0, 0.125, 1.0, 0.25, 0.875), Shapes.create(0.0, 0.0, 0.125, 0.25, 1.0, 0.875)).optimize(); + + case EDGE_INSIDE_UP_NORTH_DOWN_SOUTH -> Shapes.or(Shapes.create(0.125, 0.75, 0.0, 0.875, 1.0, 1.0), Shapes.create(0.125, 0.0, 0.0, 0.875, 1.0, 0.25)).optimize(); + case EDGE_INSIDE_UP_SOUTH_DOWN_NORTH -> Shapes.or(Shapes.create(0.125, 0.75, 0.0, 0.875, 1.0, 1.0), Shapes.create(0.125, 0.0, 0.75, 0.875, 1.0, 1.0)).optimize(); + case EDGE_INSIDE_UP_EAST_DOWN_WEST -> Shapes.or(Shapes.create(0.0, 0.75, 0.125, 1.0, 1.0, 0.875), Shapes.create(0.75, 0.0, 0.125, 1.0, 1.0, 0.875)).optimize(); + case EDGE_INSIDE_UP_WEST_DOWN_EAST -> Shapes.or(Shapes.create(0.0, 0.75, 0.125, 1.0, 1.0, 0.875), Shapes.create(0.0, 0.0, 0.125, 0.25, 1.0, 0.875)).optimize(); + + case BEND_DOWN_NORTH_EAST -> Shapes.create(0.125, 0.0, 0.0, 1.0, 0.25, 0.875); + case BEND_DOWN_EAST_SOUTH -> Shapes.create(0.125, 0.0, 0.125, 1.0, 0.25, 1.0); + case BEND_DOWN_SOUTH_WEST -> Shapes.create(0.0, 0.0, 0.125, 0.875, 0.25, 1.0); + case BEND_DOWN_WEST_NORTH -> Shapes.create(0.0, 0.0, 0.0, 0.875, 0.25, 0.875); + + case BEND_UP_NORTH_EAST -> Shapes.create(0.125, 0.75, 0.0, 1.0, 1.0, 0.875); + case BEND_UP_EAST_SOUTH -> Shapes.create(0.125, 0.75, 0.125, 1.0, 1.0, 1.0); + case BEND_UP_SOUTH_WEST -> Shapes.create(0.0, 0.75, 0.125, 0.875, 1.0, 1.0); + case BEND_UP_WEST_NORTH -> Shapes.create(0.0, 0.75, 0.0, 0.875, 1.0, 0.875); + + // TODO Missing wall bends + + case EDGE_OUTSIDE_DOWN_NORTH_UP_SOUTH -> Shapes.create(0.125, 0.0, 0.75, 0.875, 0.25, 1.0); + case EDGE_OUTSIDE_DOWN_EAST_UP_WEST -> Shapes.create(0.0, 0.0, 0.125, 0.25, 0.25, 0.875); + case EDGE_OUTSIDE_DOWN_SOUTH_UP_NORTH -> Shapes.create(0.125, 0.0, 0.0, 0.875, 0.25, 0.25); + case EDGE_OUTSIDE_DOWN_WEST_UP_EAST -> Shapes.create(0.75, 0.0, 0.125, 1.0, 0.25, 0.875); + + case EDGE_OUTSIDE_UP_NORTH_DOWN_SOUTH -> Shapes.create(0.125, 0.75, 0.0, 0.875, 1.0, 0.25); + case EDGE_OUTSIDE_UP_EAST_DOWN_WEST -> Shapes.create(0.75, 0.75, 0.125, 1.0, 1.0, 0.875); + case EDGE_OUTSIDE_UP_SOUTH_DOWN_NORTH -> Shapes.create(0.125, 0.75, 0.75, 0.875, 1.0, 1.0); + case EDGE_OUTSIDE_UP_WEST_DOWN_EAST -> Shapes.create(0.0, 0.75, 0.125, 0.25, 1.0, 0.875); + + default -> null; + }; + // @formatter:on - default:{ - return Shapes.create(0.0, 0.0, 0.0, 1.0, 1.0, 1.0); + if(vShape == null){ + OverEngineered.log.info("Missing voxelshape for shape \"" + shape + "\""); + continue; } + + map.put(shape, vShape); } - // @formatter:on + + return map; } public static boolean isBusbar(Level level, BlockPos pos){ From 67e2acfb1c1fd94231b518348f7850c9b12670f5 Mon Sep 17 00:00:00 2001 From: TwistedGate <31029668+TwistedGate@users.noreply.github.com> Date: Mon, 12 Sep 2022 16:23:03 +0200 Subject: [PATCH 06/26] Fixed faulty Screwdriver and Cutter checks for external content --- .../twistedgate/overengineered/utils/ExternalModContent.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/twistedgate/overengineered/utils/ExternalModContent.java b/src/main/java/twistedgate/overengineered/utils/ExternalModContent.java index 1329926..7532f06 100644 --- a/src/main/java/twistedgate/overengineered/utils/ExternalModContent.java +++ b/src/main/java/twistedgate/overengineered/utils/ExternalModContent.java @@ -22,7 +22,7 @@ public static boolean isIEHammer(Item item){ } public static boolean isIEScrewdriver(ItemStack stack){ - return isIEHammer(stack.getItem()); + return isIEScrewdriver(stack.getItem()); } public static boolean isIEScrewdriver(Item item){ @@ -30,7 +30,7 @@ public static boolean isIEScrewdriver(Item item){ } public static boolean isIEWirecutter(ItemStack stack){ - return isIEHammer(stack.getItem()); + return isIEWirecutter(stack.getItem()); } public static boolean isIEWirecutter(Item item){ From 59ec8d5faaefcb901bc6e9118451ae5ea3cac05e Mon Sep 17 00:00:00 2001 From: TwistedGate <31029668+TwistedGate@users.noreply.github.com> Date: Wed, 14 Jun 2023 15:54:08 +0200 Subject: [PATCH 07/26] Bump IE to `1.18.2-8.4.0-161` --- gradle.properties | 2 +- src/main/resources/META-INF/mods.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index e401021..bec354f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,7 +5,7 @@ version_minecraft=1.18.2 version_forge=40.1.48 version_fml_mappings=1.18.2 version_parchment=1.18.1-2022.03.06-1.18.2 -version_ie=1.18.2-8.1.0-150 +version_ie=1.18.2-8.4.0-161 version_jei=9.7.0.195 version_ct=9.1.156 \ No newline at end of file diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index c9dc2c9..492faf1 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -21,7 +21,7 @@ Random bits and bobs, here and there. Possibly containing QoL things. [[dependencies.overengineered]] modId="immersiveengineering" mandatory=true - versionRange="[1.18.2-8.0.2-149,)" + versionRange="[1.18.2-8.4.0-161,)" ordering="BEFORE" side="BOTH" From d8e5b4b63fdc501d3bf2f13c571fe0d4c7c5f068 Mon Sep 17 00:00:00 2001 From: TwistedGate <31029668+TwistedGate@users.noreply.github.com> Date: Wed, 14 Jun 2023 15:57:29 +0200 Subject: [PATCH 08/26] Bump Forge `40.1.48` --- src/main/resources/META-INF/mods.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index 492faf1..6a43f1d 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -28,7 +28,7 @@ Random bits and bobs, here and there. Possibly containing QoL things. [[dependencies.overengineered]] modId="forge" mandatory=true - versionRange="[40.1.25,)" + versionRange="[40.1.48,)" ordering="NONE" side="BOTH" From 1a01e1aa3860802ae578928efdf6a85e0b9b55b0 Mon Sep 17 00:00:00 2001 From: TwistedGate <31029668+TwistedGate@users.noreply.github.com> Date: Wed, 14 Jun 2023 16:03:45 +0200 Subject: [PATCH 09/26] This is such a mess. Spoiler: Doesnt work. --- .../common/data/OEBlockStates.java | 15 - src/generated/resources/.cache/cache | 4 +- .../overengineered/blockstates/busbar.json | 54 --- .../block/busbar_without_insulators.json | 9 - ...sbar_without_insulators_pre_y_rotated.json | 9 - .../common/blocks/busbar/BusbarBlock.java | 164 ++++++--- .../common/blocks/busbar/BusbarCon.java | 326 ++++++++++++++++++ .../common/blocks/busbar/BusbarState.java | 13 +- .../utils/enums/EnumBusbarShape.java | 205 +++++------ 9 files changed, 539 insertions(+), 260 deletions(-) delete mode 100644 src/generated/resources/assets/overengineered/models/block/busbar_without_insulators.json delete mode 100644 src/generated/resources/assets/overengineered/models/block/busbar_without_insulators_pre_y_rotated.json create mode 100644 src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarCon.java diff --git a/src/datagen/java/twistedgate/overengineered/common/data/OEBlockStates.java b/src/datagen/java/twistedgate/overengineered/common/data/OEBlockStates.java index 857887b..cfd9a8a 100644 --- a/src/datagen/java/twistedgate/overengineered/common/data/OEBlockStates.java +++ b/src/datagen/java/twistedgate/overengineered/common/data/OEBlockStates.java @@ -36,10 +36,6 @@ private void busbar(){ BlockModelBuilder model_insulators_normal = busModel("models/block/obj/busbar/busbar_a.obj", "_with_insulators"); BlockModelBuilder model_insulators_rotated = busModel("models/block/obj/busbar/busbar_a_alt.obj", "_with_insulators_pre_y_rotated"); - // Floating - BlockModelBuilder model_floating_normal = busModel("models/block/obj/busbar/busbar_b.obj", "_without_insulators"); - BlockModelBuilder model_floating_rotated = busModel("models/block/obj/busbar/busbar_b_alt.obj", "_without_insulators_pre_y_rotated"); - BlockModelBuilder model_bend = busModel("models/block/obj/busbar/busbar_bend.obj", "_bend"); BlockModelBuilder model_edge_inside = busModel("models/block/obj/busbar/busbar_edge_inside.obj", "_horizontal_up"); BlockModelBuilder model_edge_outside = busModel("models/block/obj/busbar/busbar_edge_outside.obj", "_horizontal_down"); @@ -47,9 +43,6 @@ private void busbar(){ model_insulators_normal.assertExistence(); model_insulators_rotated.assertExistence(); - model_floating_normal.assertExistence(); - model_floating_rotated.assertExistence(); - model_bend.assertExistence(); model_edge_inside.assertExistence(); model_edge_outside.assertExistence(); @@ -59,17 +52,9 @@ private void busbar(){ bus(EnumBusbarShape.INSULATORS_UP_NORTH_SOUTH, model_insulators_normal, 180, 0); bus(EnumBusbarShape.INSULATORS_UP_EAST_WEST, model_insulators_normal, 180, 90); - bus(EnumBusbarShape.FLOATING_DOWN_NORTH_SOUTH, model_floating_normal, 0, 0); - bus(EnumBusbarShape.FLOATING_DOWN_EAST_WEST, model_floating_normal, 0, 90); - bus(EnumBusbarShape.FLOATING_UP_NORTH_SOUTH, model_floating_normal, 180, 0); - bus(EnumBusbarShape.FLOATING_UP_EAST_WEST, model_floating_normal, 180, 90); - EnumBusbarShape.Type.STRAIGHT_INSULATORS_WALL_NORMAL.forEachIndexed((i, shape) -> bus(shape, model_insulators_normal, -90, 90 * i)); EnumBusbarShape.Type.STRAIGHT_INSULATORS_WALL_ROTATED.forEachIndexed((i, shape) -> bus(shape, model_insulators_rotated, -90, 90 * i)); - EnumBusbarShape.Type.STRAIGHT_FLOATING_WALL_NORMAL.forEachIndexed((i, shape) -> bus(shape, model_floating_normal, -90, 90 * i)); - EnumBusbarShape.Type.STRAIGHT_FLOATING_WALL_ROTATED.forEachIndexed((i, shape) -> bus(shape, model_floating_rotated, -90, 90 * i)); - EnumBusbarShape.Type.BENDS_FLOOR.forEachIndexed((i, shape) -> bus(shape, model_bend, 0, 90 + 90 * i)); EnumBusbarShape.Type.BENDS_CEILING.forEachIndexed((i, shape) -> bus(shape, model_bend, 180, 180 + 90 * i)); EnumBusbarShape.Type.BENDS_WALLS.forEachIndexed((i, shape) -> bus(shape, model_bend, -90, 90 * i)); diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 658c4fa..566a542 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -1,11 +1,9 @@ -d8c80785920283e4fe9e0230b1f92e0824da0dff assets/overengineered/blockstates/busbar.json +0b32cc406cca12760e38534d246d526d7379c7d2 assets/overengineered/blockstates/busbar.json 165737f978732b3be1b991273410046a62c3602b assets/overengineered/models/block/busbar_bend.json d38cc03cf37de4a0b62b6eb9167fb1282b38eedf assets/overengineered/models/block/busbar_horizontal_down.json a3f79a2d4727885bc80374947d26cf1413cab082 assets/overengineered/models/block/busbar_horizontal_up.json 505c39a86a3e6ac0f2f99af30685e9ff435a7d3a assets/overengineered/models/block/busbar_with_insulators.json 83c90e24f79a0745afff4c0889ff8fb4c5191978 assets/overengineered/models/block/busbar_with_insulators_pre_y_rotated.json -67e6948440b91969741558fa0e319bfa0623ecdc assets/overengineered/models/block/busbar_without_insulators.json -95c68499016695a3c9c71e95d44b78e5a7b70abb assets/overengineered/models/block/busbar_without_insulators_pre_y_rotated.json 47d3511e428faccc03c73d493604da978bad617a assets/overengineered/models/item/busbar.json f669ede4831f92d60da61cf680f634f40a2c6c2b data/overengineered/advancements/recipes/overengineered/busbar.json 84e62a1037f58c750ce069f12abdafe49f8be47b data/overengineered/advancements/recipes/overengineered/busbar2.json diff --git a/src/generated/resources/assets/overengineered/blockstates/busbar.json b/src/generated/resources/assets/overengineered/blockstates/busbar.json index f66f7cf..345334b 100644 --- a/src/generated/resources/assets/overengineered/blockstates/busbar.json +++ b/src/generated/resources/assets/overengineered/blockstates/busbar.json @@ -54,60 +54,6 @@ "x": -90, "y": 270 }, - "shape=floating_down_north_south": { - "model": "overengineered:block/busbar_without_insulators" - }, - "shape=floating_down_east_west": { - "model": "overengineered:block/busbar_without_insulators", - "y": 90 - }, - "shape=floating_up_north_south": { - "model": "overengineered:block/busbar_without_insulators", - "x": 180 - }, - "shape=floating_up_east_west": { - "model": "overengineered:block/busbar_without_insulators", - "x": 180, - "y": 90 - }, - "shape=floating_north_up_down": { - "model": "overengineered:block/busbar_without_insulators", - "x": -90 - }, - "shape=floating_east_up_down": { - "model": "overengineered:block/busbar_without_insulators", - "x": -90, - "y": 90 - }, - "shape=floating_south_up_down": { - "model": "overengineered:block/busbar_without_insulators", - "x": -90, - "y": 180 - }, - "shape=floating_west_up_down": { - "model": "overengineered:block/busbar_without_insulators", - "x": -90, - "y": 270 - }, - "shape=floating_north_east_west": { - "model": "overengineered:block/busbar_without_insulators_pre_y_rotated", - "x": -90 - }, - "shape=floating_east_north_south": { - "model": "overengineered:block/busbar_without_insulators_pre_y_rotated", - "x": -90, - "y": 90 - }, - "shape=floating_south_east_west": { - "model": "overengineered:block/busbar_without_insulators_pre_y_rotated", - "x": -90, - "y": 180 - }, - "shape=floating_west_north_south": { - "model": "overengineered:block/busbar_without_insulators_pre_y_rotated", - "x": -90, - "y": 270 - }, "shape=bend_down_north_east": { "model": "overengineered:block/busbar_bend", "y": 90 diff --git a/src/generated/resources/assets/overengineered/models/block/busbar_without_insulators.json b/src/generated/resources/assets/overengineered/models/block/busbar_without_insulators.json deleted file mode 100644 index 69625dd..0000000 --- a/src/generated/resources/assets/overengineered/models/block/busbar_without_insulators.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "textures": { - "texture": "overengineered:block/obj/busbar", - "particle": "overengineered:block/obj/busbar" - }, - "loader": "forge:obj", - "model": "overengineered:models/block/obj/busbar/busbar_b.obj", - "flip-v": true -} \ No newline at end of file diff --git a/src/generated/resources/assets/overengineered/models/block/busbar_without_insulators_pre_y_rotated.json b/src/generated/resources/assets/overengineered/models/block/busbar_without_insulators_pre_y_rotated.json deleted file mode 100644 index 908434e..0000000 --- a/src/generated/resources/assets/overengineered/models/block/busbar_without_insulators_pre_y_rotated.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "textures": { - "texture": "overengineered:block/obj/busbar", - "particle": "overengineered:block/obj/busbar" - }, - "loader": "forge:obj", - "model": "overengineered:models/block/obj/busbar/busbar_b_alt.obj", - "flip-v": true -} \ No newline at end of file diff --git a/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java b/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java index 9ccc976..20f6737 100644 --- a/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java +++ b/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java @@ -1,11 +1,15 @@ package twistedgate.overengineered.common.blocks.busbar; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; -import java.util.function.Predicate; + +import com.mojang.math.Vector3f; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.core.particles.DustParticleOptions; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.LivingEntity; @@ -27,6 +31,7 @@ import net.minecraft.world.level.material.MaterialColor; import net.minecraft.world.level.material.PushReaction; import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; @@ -59,13 +64,13 @@ public boolean propagatesSkylightDown(BlockState pState, BlockGetter pLevel, Blo } @Override - public BlockState getStateForPlacement(BlockPlaceContext pContext){ - Direction direction = pContext.getHorizontalDirection(); - Direction face = pContext.getClickedFace(); - boolean crouching = pContext.getPlayer() != null ? pContext.getPlayer().isCrouching() : false; + public BlockState getStateForPlacement(BlockPlaceContext context){ + Direction facing = context.getClickedFace(); + Direction direction = context.getHorizontalDirection(); + boolean crouching = context.getPlayer() != null ? context.getPlayer().isCrouching() : false; // @formatter:off - EnumBusbarShape shape = switch(face){ + EnumBusbarShape shape = switch(facing){ case DOWN -> (direction == Direction.EAST || direction == Direction.WEST) != crouching ? EnumBusbarShape.INSULATORS_UP_EAST_WEST : EnumBusbarShape.INSULATORS_UP_NORTH_SOUTH; case UP -> (direction == Direction.EAST || direction == Direction.WEST) != crouching ? EnumBusbarShape.INSULATORS_DOWN_EAST_WEST : EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH; case NORTH -> crouching ? EnumBusbarShape.INSULATORS_SOUTH_EAST_WEST : EnumBusbarShape.INSULATORS_SOUTH_UP_DOWN; @@ -76,32 +81,83 @@ public BlockState getStateForPlacement(BlockPlaceContext pContext){ }; // @formatter:on - return defaultBlockState().setValue(SHAPE, shape); + return this.defaultBlockState().setValue(SHAPE, shape); } @Override public InteractionResult use(BlockState pState, Level pLevel, BlockPos pPos, Player pPlayer, InteractionHand pHand, BlockHitResult pHit){ - if(ExternalModContent.isIEHammer(pPlayer.getItemInHand(pHand))){ - EnumBusbarShape shape = pState.getValue(SHAPE); - if(EnumBusbarShape.Type.STRAIGHT_SEGMENTS.contains(shape)){ - EnumBusbarShape newShape = null; - - // @formatter:off - if(shape == EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH)newShape = EnumBusbarShape.FLOATING_DOWN_NORTH_SOUTH; - if(shape == EnumBusbarShape.FLOATING_DOWN_NORTH_SOUTH) newShape = EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH; - if(shape == EnumBusbarShape.INSULATORS_DOWN_EAST_WEST) newShape = EnumBusbarShape.FLOATING_DOWN_EAST_WEST; - if(shape == EnumBusbarShape.FLOATING_DOWN_EAST_WEST) newShape = EnumBusbarShape.INSULATORS_DOWN_EAST_WEST; - // @formatter:on + ItemStack held = pPlayer.getItemInHand(InteractionHand.MAIN_HAND); + + if(ExternalModContent.isIEHammer(held)){ + BlockPos lastPos = null; + BlockPos currentPos = pPos; + + retLabel:for(int i = 0;i < 32;i++){ + BlockState state = pLevel.getBlockState(currentPos); + if(state.getBlock() == this){ + EnumBusbarShape shape = state.getValue(SHAPE); + + List list = new ArrayList<>(); + shape.connectionOffsets(list, currentPos); + + for(BlockPos p:list){ + if((lastPos == null || p != lastPos) && isBusbar(pLevel, p)){ + if(p == pPos) break retLabel; + lastPos = currentPos; + currentPos = p; + break; + } + } + } + } + + DustParticleOptions src = new DustParticleOptions(new Vector3f(Vec3.fromRGB24(0xFF0000)), 1.0F); + DustParticleOptions dst = new DustParticleOptions(new Vector3f(Vec3.fromRGB24(0x00FF00)), 1.0F); + + pLevel.addParticle(src, pPos.getX() + .5, pPos.getY() + .5, pPos.getZ() + .5, 0.0, 0.0, 0.0); + pLevel.addParticle(dst, currentPos.getX() + .5, currentPos.getY() + .5, currentPos.getZ() + .5, 0.0, 0.0, 0.0); + OverEngineered.log.info("End appears to be at {}", currentPos); + + return InteractionResult.SUCCESS; + } + + if(ExternalModContent.isIEScrewdriver(held)){ + final BusbarCon bus = BusbarCon.create(pLevel, pPos, pState); + if(bus != null){ + bus.removeExistingConnections(); + OverEngineered.log.info("connections: {}", bus.freePoints.size()); - if(newShape != null && newShape != shape){ - pLevel.setBlock(pPos, pState.setValue(SHAPE, newShape), 3); - return InteractionResult.SUCCESS; + DustParticleOptions dust = new DustParticleOptions(new Vector3f(Vec3.fromRGB24(0x00FF00)), 1.0F); + for(BlockPos p:bus.freePoints){ + pLevel.addParticle(dust, p.getX() + .5, p.getY() + .5, p.getZ() + .5, 0.0, 0.0, 0.0); } } + + return InteractionResult.SUCCESS; } - if(pPlayer.getItemInHand(pHand).isEmpty()){ - re_set_shapes = true; + if(held.isEmpty()){ + EnumBusbarShape shape = pState.getValue(SHAPE); + + List connections; + { + List list = new ArrayList<>(); + shape.connectionOffsets(list, pPos); + for(int i = 0;i < list.size();i++){ + BlockState state = pLevel.getBlockState(list.get(i)); + if(state.getBlock() != this){ + list.remove(i--); + } + } + connections = list; + } + + DustParticleOptions dust = new DustParticleOptions(new Vector3f(Vec3.fromRGB24(0x0000FF)), 1.0F); + for(int i = 0;i < connections.size();i++){ + BlockPos currentPos = connections.get(i); + pLevel.addParticle(dust, currentPos.getX() + .5, currentPos.getY() + .5, currentPos.getZ() + .5, 0.0, 0.0, 0.0); + } + return InteractionResult.SUCCESS; } @@ -115,17 +171,24 @@ public void setPlacedBy(Level level, BlockPos pos, BlockState state, LivingEntit @Override public void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean isMoving){ if(!oldState.is(state.getBlock())){ - state = updateDir(level, pos, state, true); + final BusbarCon bus = BusbarCon.create(level, pos, state); + if(bus != null){ + bus.onPlace(true); + } + +// state = updateDir(level, pos, state, true); } } @Override public void neighborChanged(BlockState state, Level level, BlockPos pos, Block lastBlock, BlockPos fromPos, boolean isMoving){ if(!level.isClientSide && level.getBlockState(pos).is(this)){ - state = updateDir(level, pos, state, false); +// state = updateDir(level, pos, state, false); } } + @Deprecated + @SuppressWarnings("unused") private BlockState updateDir(Level level, BlockPos pos, BlockState state, boolean placing){ if(level.isClientSide){ return state; @@ -147,22 +210,10 @@ public BlockEntityTicker getTicker(Level pLevel, Bloc } static final VoxelShape MISSING_SHAPE = Shapes.create(0.125, 0.125, 0.125, 0.875, 0.875, 0.875); - static Map SHAPES_CACHE = makeShapeCache(); - - /** - * @deprecated // TODO To be removed once the Shapes are properly set up - */ - @Deprecated(forRemoval = true) - static boolean re_set_shapes = false; + static final Map SHAPES_CACHE = makeShapeCache(); @Override public VoxelShape getShape(BlockState pState, BlockGetter pLevel, BlockPos pPos, CollisionContext pContext){ - if(re_set_shapes){ - SHAPES_CACHE = makeShapeCache(); - re_set_shapes = false; - OverEngineered.log.info("Shapes Re-set."); - } - return SHAPES_CACHE.getOrDefault(pState.getValue(SHAPE), MISSING_SHAPE); } @@ -172,20 +223,20 @@ private static Map makeShapeCache(){ // @formatter:off VoxelShape vShape = switch(shape){ - case INSULATORS_DOWN_NORTH_SOUTH, FLOATING_DOWN_NORTH_SOUTH -> Shapes.create(0.125, 0.0, 0.0, 0.875, 0.25, 1.0); - case INSULATORS_DOWN_EAST_WEST, FLOATING_DOWN_EAST_WEST -> Shapes.create(0.0, 0.0, 0.125, 1.0, 0.25, 0.875); - case INSULATORS_UP_NORTH_SOUTH, FLOATING_UP_NORTH_SOUTH -> Shapes.create(0.125, 0.75, 0.0, 0.875, 1.0, 1.0); - case INSULATORS_UP_EAST_WEST, FLOATING_UP_EAST_WEST -> Shapes.create(0.0, 0.75, 0.125, 1.0, 1.0, 0.875); + case INSULATORS_DOWN_NORTH_SOUTH -> Shapes.create(0.125, 0.0, 0.0, 0.875, 0.25, 1.0); + case INSULATORS_DOWN_EAST_WEST -> Shapes.create(0.0, 0.0, 0.125, 1.0, 0.25, 0.875); + case INSULATORS_UP_NORTH_SOUTH -> Shapes.create(0.125, 0.75, 0.0, 0.875, 1.0, 1.0); + case INSULATORS_UP_EAST_WEST -> Shapes.create(0.0, 0.75, 0.125, 1.0, 1.0, 0.875); - case INSULATORS_NORTH_UP_DOWN, FLOATING_NORTH_UP_DOWN -> Shapes.create(0.125, 0.0, 0.0, 0.875, 1.0, 0.25); - case INSULATORS_EAST_UP_DOWN, FLOATING_EAST_UP_DOWN -> Shapes.create(0.75, 0.0, 0.125, 1.0, 1.0, 0.875); - case INSULATORS_SOUTH_UP_DOWN, FLOATING_SOUTH_UP_DOWN -> Shapes.create(0.125, 0.0, 0.75, 0.875, 1.0, 1.0); - case INSULATORS_WEST_UP_DOWN, FLOATING_WEST_UP_DOWN -> Shapes.create(0.0, 0.0, 0.125, 0.25, 1.0, 0.875); + case INSULATORS_NORTH_UP_DOWN -> Shapes.create(0.125, 0.0, 0.0, 0.875, 1.0, 0.25); + case INSULATORS_EAST_UP_DOWN -> Shapes.create(0.75, 0.0, 0.125, 1.0, 1.0, 0.875); + case INSULATORS_SOUTH_UP_DOWN -> Shapes.create(0.125, 0.0, 0.75, 0.875, 1.0, 1.0); + case INSULATORS_WEST_UP_DOWN -> Shapes.create(0.0, 0.0, 0.125, 0.25, 1.0, 0.875); - case INSULATORS_NORTH_EAST_WEST, FLOATING_NORTH_EAST_WEST -> Shapes.create(0.0, 0.125, 0.0, 1.0, 0.875, 0.25); - case INSULATORS_SOUTH_EAST_WEST, FLOATING_SOUTH_EAST_WEST -> Shapes.create(0.0, 0.125, 0.75, 1.0, 0.875, 1.0); - case INSULATORS_EAST_NORTH_SOUTH, FLOATING_EAST_NORTH_SOUTH -> Shapes.create(0.75, 0.125, 0.0, 1.0, 0.875, 1.0); - case INSULATORS_WEST_NORTH_SOUTH, FLOATING_WEST_NORTH_SOUTH -> Shapes.create(0.0, 0.125, 0.0, 0.25, 0.875, 1.0); + case INSULATORS_NORTH_EAST_WEST -> Shapes.create(0.0, 0.125, 0.0, 1.0, 0.875, 0.25); + case INSULATORS_SOUTH_EAST_WEST -> Shapes.create(0.0, 0.125, 0.75, 1.0, 0.875, 1.0); + case INSULATORS_EAST_NORTH_SOUTH -> Shapes.create(0.75, 0.125, 0.0, 1.0, 0.875, 1.0); + case INSULATORS_WEST_NORTH_SOUTH -> Shapes.create(0.0, 0.125, 0.0, 0.25, 0.875, 1.0); case EDGE_INSIDE_DOWN_NORTH_UP_SOUTH -> Shapes.or(Shapes.create(0.125, 0.0, 0.0, 0.875, 0.25, 1.0), Shapes.create(0.125, 0.0, 0.0, 0.875, 1.0, 0.25)).optimize(); case EDGE_INSIDE_DOWN_SOUTH_UP_NORTH -> Shapes.or(Shapes.create(0.125, 0.0, 0.0, 0.875, 0.25, 1.0), Shapes.create(0.125, 0.0, 0.75, 0.875, 1.0, 1.0)).optimize(); @@ -207,7 +258,10 @@ private static Map makeShapeCache(){ case BEND_UP_SOUTH_WEST -> Shapes.create(0.0, 0.75, 0.125, 0.875, 1.0, 1.0); case BEND_UP_WEST_NORTH -> Shapes.create(0.0, 0.75, 0.0, 0.875, 1.0, 0.875); - // TODO Missing wall bends + case BEND_NORTH_DOWN_EAST, BEND_EAST_DOWN_SOUTH, BEND_SOUTH_DOWN_WEST, BEND_WEST_DOWN_NORTH -> Shapes.create(0.0, 0.125, 0.0, 0.875, 1.0, 0.25); + case BEND_NORTH_EAST_UP, BEND_EAST_SOUTH_UP, BEND_SOUTH_WEST_UP, BEND_WEST_NORTH_UP -> Shapes.create(0.75, 0.125, 0.0, 1.0, 1.0, 0.875); + case BEND_NORTH_UP_WEST, BEND_EAST_UP_NORTH, BEND_SOUTH_UP_EAST, BEND_WEST_UP_SOUTH -> Shapes.create(0.125, 0.125, 0.75, 1.0, 1.0, 1.0); + case BEND_NORTH_WEST_DOWN, BEND_EAST_NORTH_DOWN, BEND_SOUTH_EAST_DOWN, BEND_WEST_SOUTH_DOWN -> Shapes.create(0.0, 0.125, 0.125, 0.25, 1.0, 1.0); case EDGE_OUTSIDE_DOWN_NORTH_UP_SOUTH -> Shapes.create(0.125, 0.0, 0.75, 0.875, 0.25, 1.0); case EDGE_OUTSIDE_DOWN_EAST_UP_WEST -> Shapes.create(0.0, 0.0, 0.125, 0.25, 0.25, 0.875); @@ -223,12 +277,12 @@ private static Map makeShapeCache(){ }; // @formatter:on - if(vShape == null){ - OverEngineered.log.info("Missing voxelshape for shape \"" + shape + "\""); + if(vShape != null){ + map.put(shape, vShape); + }else{ + OverEngineered.log.info("Missing voxelshape for shape \"" + shape.toString().toLowerCase() + "\""); continue; } - - map.put(shape, vShape); } return map; diff --git a/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarCon.java b/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarCon.java new file mode 100644 index 0000000..bdad03d --- /dev/null +++ b/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarCon.java @@ -0,0 +1,326 @@ +package twistedgate.overengineered.common.blocks.busbar; + +import java.util.ArrayList; +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; +import twistedgate.overengineered.OverEngineered; +import twistedgate.overengineered.utils.enums.EnumBusbarShape; + +public class BusbarCon{ + + /** + * This, if not empty, shows that there is still a free spot to connect to + */ + final List freePoints = new ArrayList<>(); + final Level level; + final BlockPos pos; + final Direction facing; + EnumBusbarShape shape; + BlockState state; + + public BusbarCon(Level level, BlockPos pos, BlockState state){ + this.level = level; + this.pos = pos; + this.state = state; + this.shape = state.getValue(BusbarBlock.SHAPE); + this.facing = this.shape.facing; + + updateConnections(this.shape); + } + + public List getConnections(){ + return this.freePoints; + } + + public EnumBusbarShape getShape(){ + return this.shape; + } + + public BlockState getState(){ + removeExistingConnections(); + + BlockState ret = this.state; + // Not sure if somethings gonna go between this yet + return ret; + } + + @SuppressWarnings("unused") + public void onPlace(boolean placing){ + // @formatter:off + final BlockPos posDown = this.pos.relative(Direction.DOWN); + final BlockPos posUp = this.pos.relative(Direction.UP); + final BlockPos posNorth = this.pos.relative(Direction.NORTH); + final BlockPos posEast = this.pos.relative(Direction.EAST); + final BlockPos posSouth = this.pos.relative(Direction.SOUTH); + final BlockPos posWest = this.pos.relative(Direction.WEST); + + final boolean hasDown = this.hasNeigborBus(posDown); + final boolean hasUp = this.hasNeigborBus(posUp); + final boolean hasNorth = this.hasNeigborBus(posNorth); + final boolean hasSouth = this.hasNeigborBus(posSouth); + final boolean hasEast = this.hasNeigborBus(posEast); + final boolean hasWest = this.hasNeigborBus(posWest); + + final boolean _UpOrDown = hasUp || hasDown; + final boolean _NorthOrSouth = hasNorth || hasSouth; + final boolean _EastOrWest = hasEast || hasWest; + + final boolean _NorthAndEast = hasNorth && hasEast; + final boolean _NorthAndWest = hasNorth && hasWest; + final boolean _SouthAndEast = hasSouth && hasEast; + final boolean _SouthAndWest = hasSouth && hasWest; + + OverEngineered.log.info(String.format(""" + onPlace([%d, %d, %d]) + down: %s, + up: %s, + north: %s, + south: %s, + east: %s, + west: %s""", this.pos.getX(), this.pos.getY(), this.pos.getZ(), + hasDown, hasUp, hasNorth, hasSouth, hasEast, hasWest)); + // @formatter:on + + EnumBusbarShape newShape = null; + + switch(this.facing){ + case UP:{ + break; + } + case DOWN:{ + if(_NorthOrSouth && !_EastOrWest){ + newShape = EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH; + } + if(_EastOrWest && !_NorthOrSouth){ + newShape = EnumBusbarShape.INSULATORS_DOWN_EAST_WEST; + } + + if(_NorthAndWest && !_SouthAndEast){ + newShape = EnumBusbarShape.BEND_DOWN_WEST_NORTH; + } + if(_NorthAndEast && !_SouthAndWest){ + newShape = EnumBusbarShape.BEND_DOWN_NORTH_EAST; + } + + if(_SouthAndEast && !_NorthAndWest){ + newShape = EnumBusbarShape.BEND_DOWN_EAST_SOUTH; + } + if(_SouthAndWest && !_NorthAndEast){ + newShape = EnumBusbarShape.BEND_DOWN_SOUTH_WEST; + } + break; + } + case NORTH:{ + break; + } + case EAST:{ + break; + } + case SOUTH:{ + break; + } + case WEST:{ + break; + } + default: + break; + } + + // TODO ??? + + if(newShape != null) + this.shape = newShape; + + // TODO ??? + updateConnections(this.shape); + this.state = this.state.setValue(BusbarBlock.SHAPE, this.shape); + if(placing || this.level.getBlockState(this.pos) != this.state){ + this.level.setBlock(this.pos, this.state, 3); + + for(BlockPos cPos:this.freePoints){ + BusbarCon bus = getBus(cPos); + + if(bus != null){ + bus.removeExistingConnections(); + + if(bus.canConnectTo(this)){ + bus.connectTo(this); + } + } + } + } + } + + public void connectTo(BusbarCon other){ + this.freePoints.add(other.pos); + + // @formatter:off + final BlockPos posDown = this.pos.relative(Direction.DOWN); + final BlockPos posUp = this.pos.relative(Direction.UP); + final BlockPos posNorth = this.pos.relative(Direction.NORTH); + final BlockPos posEast = this.pos.relative(Direction.EAST); + final BlockPos posSouth = this.pos.relative(Direction.SOUTH); + final BlockPos posWest = this.pos.relative(Direction.WEST); + + final boolean hasDown = this.hasConnection(posDown); + final boolean hasUp = this.hasConnection(posUp); + final boolean hasNorth = this.hasConnection(posNorth); + final boolean hasEast = this.hasConnection(posEast); + final boolean hasSouth = this.hasConnection(posSouth); + final boolean hasWest = this.hasConnection(posWest); + // @formatter:on + + OverEngineered.log.info(String.format(""" + [%d, %d, %d].connectTo([%d, %d, %d]) + down: %s, + up: %s, + north: %s, + south: %s, + east: %s, + west: %s""", this.pos.getX(), this.pos.getY(), this.pos.getZ(), + other.pos.getX(), other.pos.getY(), other.pos.getZ(), + hasDown, hasUp, hasNorth, hasSouth, hasEast, hasWest)); + + EnumBusbarShape shape = null; + + switch(this.facing){ + case UP:{ + break; + } + case DOWN:{ + if(hasNorth || hasSouth){ + shape = EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH; + } + if(hasEast || hasWest){ + shape = EnumBusbarShape.INSULATORS_DOWN_EAST_WEST; + } + + if(hasSouth && hasEast && !hasNorth && !hasWest){ + shape = EnumBusbarShape.BEND_DOWN_EAST_SOUTH; + } + if(hasSouth && hasWest && !hasNorth && !hasEast){ + shape = EnumBusbarShape.BEND_DOWN_SOUTH_WEST; + } + if(hasNorth && hasWest && !hasSouth && !hasEast){ + shape = EnumBusbarShape.BEND_DOWN_WEST_NORTH; + } + if(hasNorth && hasEast && !hasSouth && !hasWest){ + shape = EnumBusbarShape.BEND_DOWN_NORTH_EAST; + } + break; + } + case NORTH:{ + break; + } + case EAST:{ + break; + } + case SOUTH:{ + break; + } + case WEST:{ + break; + } + default: + break; + } + + //OverEngineered.log.info("Selecting: {}", shape != null ? shape.getSerializedName() : "Default"); + + if(shape == null){ + shape = EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH; + } + + this.state = this.state.setValue(BusbarBlock.SHAPE, shape); + this.level.setBlock(this.pos, this.state, 3); + } + + public BusbarCon printDebugInfo(){ + OverEngineered.log.info(toString()); + return this; + } + + public boolean hasOpenConnection(){ + return !this.freePoints.isEmpty(); + } + + public boolean canConnectTo(BusbarCon bus){ + return connectsTo(bus) || hasOpenConnection(); + } + + @Nullable + public BusbarCon getBus(BlockPos pos){ + BlockState state = this.level.getBlockState(pos); + return create(this.level, pos, state); + } + + @Nullable + public static BusbarCon create(Level level, BlockPos pos, BlockState state){ + return BusbarBlock.isBusbar(state) ? new BusbarCon(level, pos, state) : null; + } + + public void updateConnections(EnumBusbarShape shape){ + this.freePoints.clear(); + shape.connectionOffsets(this.freePoints, this.pos); + } + + /** + *
+	 * This has to be called after instantiating.
+	 * 
+ * + * Remove connections that already exist between this and another buses.
+ */ + public BusbarCon removeExistingConnections(){ + // This caues massive recursion when called inside the constructor, so has to be called seperately! + for(int i = 0;i < this.freePoints.size();i++){ + BusbarCon bus = getBus(this.freePoints.get(i)); + if(bus != null && bus.connectsTo(this)){ + this.freePoints.set(i, bus.pos); + }else{ + this.freePoints.remove(i--); + } + } + return this; + } + + public boolean connectsTo(BusbarCon bus){ + return hasConnection(bus.pos); + } + + public boolean hasConnection(BlockPos pos){ + for(int i = 0;i < this.freePoints.size();i++){ + BlockPos p = this.freePoints.get(i); + if(p.equals(pos)){ + return true; + } + } + return false; + } + + public boolean hasNeigborBus(BlockPos pos){ + BusbarCon bus = getBus(pos); + if(bus == null) + return false; + + bus.removeExistingConnections(); + return bus.canConnectTo(this); + } + + @Override + public String toString(){ + return String.format(""" + BusbarCon(){ + Level: %s + Pos: %s + State: %s + Connections: %s + }""", this.level, this.pos, this.state, this.freePoints); + } +} diff --git a/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarState.java b/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarState.java index 9a73b3d..c8a6d40 100644 --- a/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarState.java +++ b/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarState.java @@ -10,6 +10,11 @@ import net.minecraft.world.level.block.state.BlockState; import twistedgate.overengineered.utils.enums.EnumBusbarShape; +/** + * Old broken attempt + * + * @author TwistedGate + */ public class BusbarState{ private final List connections = new ArrayList<>(); private final Level level; @@ -224,11 +229,11 @@ private void connectTo(BusbarState state){ private void removeSoftConnections(){ for(int i = 0;i < this.connections.size();i++){ - BusbarState busState = getBus(this.connections.get(i)); - if(busState != null && busState.connectsTo(this)){ - this.connections.set(i, busState.pos); - }else{ + BusbarState bus = getBus(this.connections.get(i)); + if(bus != null && bus.connectsTo(this)){ this.connections.remove(i--); + }else{ + this.connections.set(i, bus.pos); } } } diff --git a/src/main/java/twistedgate/overengineered/utils/enums/EnumBusbarShape.java b/src/main/java/twistedgate/overengineered/utils/enums/EnumBusbarShape.java index 119ffa3..73e23f7 100644 --- a/src/main/java/twistedgate/overengineered/utils/enums/EnumBusbarShape.java +++ b/src/main/java/twistedgate/overengineered/utils/enums/EnumBusbarShape.java @@ -21,101 +21,90 @@ public enum EnumBusbarShape implements StringRepresentable{ // @formatter:off // Straights with Insulators (FACING_FROM_TO) - INSULATORS_DOWN_NORTH_SOUTH(ConnectionsPoints.NORTH_SOUTH), - INSULATORS_DOWN_EAST_WEST(ConnectionsPoints.EAST_WEST), - INSULATORS_UP_NORTH_SOUTH(ConnectionsPoints.NORTH_SOUTH), - INSULATORS_UP_EAST_WEST(ConnectionsPoints.EAST_WEST), + INSULATORS_DOWN_NORTH_SOUTH(Direction.DOWN, Connections.NORTH_SOUTH), + INSULATORS_DOWN_EAST_WEST(Direction.DOWN, Connections.EAST_WEST), + INSULATORS_UP_NORTH_SOUTH(Direction.UP, Connections.NORTH_SOUTH), + INSULATORS_UP_EAST_WEST(Direction.UP, Connections.EAST_WEST), - INSULATORS_NORTH_UP_DOWN(ConnectionsPoints.UP_DOWN), - INSULATORS_EAST_UP_DOWN(ConnectionsPoints.UP_DOWN), - INSULATORS_SOUTH_UP_DOWN(ConnectionsPoints.UP_DOWN), - INSULATORS_WEST_UP_DOWN(ConnectionsPoints.UP_DOWN), - INSULATORS_NORTH_EAST_WEST(ConnectionsPoints.EAST_WEST), - INSULATORS_EAST_NORTH_SOUTH(ConnectionsPoints.NORTH_SOUTH), - INSULATORS_SOUTH_EAST_WEST(ConnectionsPoints.EAST_WEST), - INSULATORS_WEST_NORTH_SOUTH(ConnectionsPoints.NORTH_SOUTH), - - // Straights without Insulators (FACING_FROM_TO) - FLOATING_DOWN_NORTH_SOUTH(ConnectionsPoints.NORTH_SOUTH), - FLOATING_DOWN_EAST_WEST(ConnectionsPoints.EAST_WEST), - FLOATING_UP_NORTH_SOUTH(ConnectionsPoints.NORTH_SOUTH), - FLOATING_UP_EAST_WEST(ConnectionsPoints.EAST_WEST), - - FLOATING_NORTH_UP_DOWN(ConnectionsPoints.UP_DOWN), - FLOATING_EAST_UP_DOWN(ConnectionsPoints.UP_DOWN), - FLOATING_SOUTH_UP_DOWN(ConnectionsPoints.UP_DOWN), - FLOATING_WEST_UP_DOWN(ConnectionsPoints.UP_DOWN), - FLOATING_NORTH_EAST_WEST(ConnectionsPoints.EAST_WEST), - FLOATING_EAST_NORTH_SOUTH(ConnectionsPoints.NORTH_SOUTH), - FLOATING_SOUTH_EAST_WEST(ConnectionsPoints.EAST_WEST), - FLOATING_WEST_NORTH_SOUTH(ConnectionsPoints.NORTH_SOUTH), + INSULATORS_NORTH_UP_DOWN(Direction.NORTH, Connections.UP_DOWN), + INSULATORS_EAST_UP_DOWN(Direction.EAST, Connections.UP_DOWN), + INSULATORS_SOUTH_UP_DOWN(Direction.SOUTH, Connections.UP_DOWN), + INSULATORS_WEST_UP_DOWN(Direction.WEST, Connections.UP_DOWN), + INSULATORS_NORTH_EAST_WEST(Direction.NORTH, Connections.EAST_WEST), + INSULATORS_EAST_NORTH_SOUTH(Direction.EAST, Connections.NORTH_SOUTH), + INSULATORS_SOUTH_EAST_WEST(Direction.SOUTH, Connections.EAST_WEST), + INSULATORS_WEST_NORTH_SOUTH(Direction.WEST, Connections.NORTH_SOUTH), // 90° Bends (FACING_FROM_TO) - BEND_DOWN_NORTH_EAST(ConnectionsPoints.NORTH_EAST), - BEND_DOWN_EAST_SOUTH(ConnectionsPoints.EAST_SOUTH), - BEND_DOWN_SOUTH_WEST(ConnectionsPoints.SOUTH_WEST), - BEND_DOWN_WEST_NORTH(ConnectionsPoints.WEST_NORTH), + BEND_DOWN_NORTH_EAST(Direction.DOWN, Connections.NORTH_EAST), + BEND_DOWN_EAST_SOUTH(Direction.DOWN, Connections.EAST_SOUTH), + BEND_DOWN_SOUTH_WEST(Direction.DOWN, Connections.SOUTH_WEST), + BEND_DOWN_WEST_NORTH(Direction.DOWN, Connections.WEST_NORTH), - BEND_UP_NORTH_EAST(ConnectionsPoints.NORTH_EAST), - BEND_UP_EAST_SOUTH(ConnectionsPoints.EAST_SOUTH), - BEND_UP_SOUTH_WEST(ConnectionsPoints.SOUTH_WEST), - BEND_UP_WEST_NORTH(ConnectionsPoints.WEST_NORTH), + BEND_UP_NORTH_EAST(Direction.UP, Connections.NORTH_EAST), + BEND_UP_EAST_SOUTH(Direction.UP, Connections.EAST_SOUTH), + BEND_UP_SOUTH_WEST(Direction.UP, Connections.SOUTH_WEST), + BEND_UP_WEST_NORTH(Direction.UP, Connections.WEST_NORTH), - BEND_NORTH_DOWN_EAST(ConnectionsPoints.DOWN_EAST), - BEND_NORTH_EAST_UP(ConnectionsPoints.UP_EAST), - BEND_NORTH_UP_WEST(ConnectionsPoints.UP_WEST), - BEND_NORTH_WEST_DOWN(ConnectionsPoints.DOWN_WEST), + BEND_NORTH_DOWN_EAST(Direction.NORTH, Connections.DOWN_EAST), + BEND_NORTH_EAST_UP(Direction.NORTH, Connections.UP_EAST), + BEND_NORTH_UP_WEST(Direction.NORTH, Connections.UP_WEST), + BEND_NORTH_WEST_DOWN(Direction.NORTH, Connections.DOWN_WEST), - BEND_EAST_DOWN_SOUTH(ConnectionsPoints.DOWN_SOUTH), - BEND_EAST_SOUTH_UP(ConnectionsPoints.UP_SOUTH), - BEND_EAST_UP_NORTH(ConnectionsPoints.UP_NORTH), - BEND_EAST_NORTH_DOWN(ConnectionsPoints.DOWN_NORTH), + BEND_EAST_DOWN_SOUTH(Direction.EAST, Connections.DOWN_SOUTH), + BEND_EAST_SOUTH_UP(Direction.EAST, Connections.UP_SOUTH), + BEND_EAST_UP_NORTH(Direction.EAST, Connections.UP_NORTH), + BEND_EAST_NORTH_DOWN(Direction.EAST, Connections.DOWN_NORTH), - BEND_SOUTH_DOWN_WEST(ConnectionsPoints.DOWN_WEST), - BEND_SOUTH_WEST_UP(ConnectionsPoints.UP_WEST), - BEND_SOUTH_UP_EAST(ConnectionsPoints.UP_EAST), - BEND_SOUTH_EAST_DOWN(ConnectionsPoints.DOWN_EAST), + BEND_SOUTH_DOWN_WEST(Direction.SOUTH, Connections.DOWN_WEST), + BEND_SOUTH_WEST_UP(Direction.SOUTH, Connections.UP_WEST), + BEND_SOUTH_UP_EAST(Direction.SOUTH, Connections.UP_EAST), + BEND_SOUTH_EAST_DOWN(Direction.SOUTH, Connections.DOWN_EAST), - BEND_WEST_DOWN_NORTH(ConnectionsPoints.DOWN_NORTH), - BEND_WEST_NORTH_UP(ConnectionsPoints.UP_NORTH), - BEND_WEST_UP_SOUTH(ConnectionsPoints.UP_SOUTH), - BEND_WEST_SOUTH_DOWN(ConnectionsPoints.DOWN_SOUTH), + BEND_WEST_DOWN_NORTH(Direction.WEST, Connections.DOWN_NORTH), + BEND_WEST_NORTH_UP(Direction.WEST, Connections.UP_NORTH), + BEND_WEST_UP_SOUTH(Direction.WEST, Connections.UP_SOUTH), + BEND_WEST_SOUTH_DOWN(Direction.WEST, Connections.DOWN_SOUTH), - // Inside Edges (SIDE_FACING_FROM_TO) - EDGE_INSIDE_DOWN_NORTH_UP_SOUTH(ConnectionsPoints.UP_SOUTH), - EDGE_INSIDE_DOWN_EAST_UP_WEST(ConnectionsPoints.UP_WEST), - EDGE_INSIDE_DOWN_SOUTH_UP_NORTH(ConnectionsPoints.UP_NORTH), - EDGE_INSIDE_DOWN_WEST_UP_EAST(ConnectionsPoints.UP_EAST), - EDGE_INSIDE_UP_NORTH_DOWN_SOUTH(ConnectionsPoints.DOWN_SOUTH), - EDGE_INSIDE_UP_EAST_DOWN_WEST(ConnectionsPoints.DOWN_WEST), - EDGE_INSIDE_UP_SOUTH_DOWN_NORTH(ConnectionsPoints.DOWN_NORTH), - EDGE_INSIDE_UP_WEST_DOWN_EAST(ConnectionsPoints.DOWN_EAST), + // Inside Edges (FACING_SIDE_FROM_TO) + EDGE_INSIDE_DOWN_NORTH_UP_SOUTH (Direction.DOWN, Connections.UP_SOUTH), + EDGE_INSIDE_DOWN_EAST_UP_WEST (Direction.DOWN, Connections.UP_WEST), + EDGE_INSIDE_DOWN_SOUTH_UP_NORTH (Direction.DOWN, Connections.UP_NORTH), + EDGE_INSIDE_DOWN_WEST_UP_EAST (Direction.DOWN, Connections.UP_EAST), + EDGE_INSIDE_UP_NORTH_DOWN_SOUTH (Direction.UP, Connections.DOWN_SOUTH), + EDGE_INSIDE_UP_EAST_DOWN_WEST (Direction.UP, Connections.DOWN_WEST), + EDGE_INSIDE_UP_SOUTH_DOWN_NORTH (Direction.UP, Connections.DOWN_NORTH), + EDGE_INSIDE_UP_WEST_DOWN_EAST (Direction.UP, Connections.DOWN_EAST), - // Outside Edges (SIDE_FACING_FROM_TO) - EDGE_OUTSIDE_DOWN_NORTH_UP_SOUTH(ConnectionsPoints.UP_SOUTH), - EDGE_OUTSIDE_DOWN_EAST_UP_WEST(ConnectionsPoints.UP_WEST), - EDGE_OUTSIDE_DOWN_SOUTH_UP_NORTH(ConnectionsPoints.UP_NORTH), - EDGE_OUTSIDE_DOWN_WEST_UP_EAST(ConnectionsPoints.UP_EAST), - EDGE_OUTSIDE_UP_NORTH_DOWN_SOUTH(ConnectionsPoints.DOWN_SOUTH), - EDGE_OUTSIDE_UP_EAST_DOWN_WEST(ConnectionsPoints.DOWN_WEST), - EDGE_OUTSIDE_UP_SOUTH_DOWN_NORTH(ConnectionsPoints.DOWN_NORTH), - EDGE_OUTSIDE_UP_WEST_DOWN_EAST(ConnectionsPoints.DOWN_EAST), + // Outside Edges (FACING_SIDE_FROM_TO) + EDGE_OUTSIDE_DOWN_NORTH_UP_SOUTH(Direction.DOWN, Connections.UP_SOUTH), + EDGE_OUTSIDE_DOWN_EAST_UP_WEST (Direction.DOWN, Connections.UP_WEST), + EDGE_OUTSIDE_DOWN_SOUTH_UP_NORTH(Direction.DOWN, Connections.UP_NORTH), + EDGE_OUTSIDE_DOWN_WEST_UP_EAST (Direction.DOWN, Connections.UP_EAST), + EDGE_OUTSIDE_UP_NORTH_DOWN_SOUTH(Direction.UP, Connections.DOWN_SOUTH), + EDGE_OUTSIDE_UP_EAST_DOWN_WEST (Direction.UP, Connections.DOWN_WEST), + EDGE_OUTSIDE_UP_SOUTH_DOWN_NORTH(Direction.UP, Connections.DOWN_NORTH), + EDGE_OUTSIDE_UP_WEST_DOWN_EAST (Direction.UP, Connections.DOWN_EAST), ; // @formatter:on private final String serialname; - private final Direction[] points; - private EnumBusbarShape(Direction... points){ + public final Direction facing; + public final Connections connections; + private EnumBusbarShape(Direction facing, Connections cons){ this.serialname = name().toLowerCase(); - this.points = points; + this.facing = facing; + this.connections = cons; } - private EnumBusbarShape(String name, Direction... points){ + + private EnumBusbarShape(String name, Direction facing, Connections cons){ this.serialname = name; - this.points = points; + this.facing = facing; + this.connections = cons; } public void connectionOffsets(final List list, BlockPos pos){ - for(Direction p:this.points){ + for(Direction p:this.connections.points){ list.add(pos.relative(p)); } } @@ -125,25 +114,39 @@ public String getSerializedName(){ return this.serialname; } - public static class ConnectionsPoints{ - private static final Direction[] NORTH_SOUTH = {Direction.NORTH, Direction.SOUTH}; - private static final Direction[] EAST_WEST = {Direction.EAST, Direction.WEST}; - private static final Direction[] UP_DOWN = {Direction.UP, Direction.DOWN}; + public boolean compatibleWith(EnumBusbarShape other){ + return this.connections.compatibleWith(other.connections); + } + + public static enum Connections{ + NORTH_SOUTH(Direction.NORTH, Direction.SOUTH), + EAST_WEST(Direction.EAST, Direction.WEST), + UP_DOWN(Direction.UP, Direction.DOWN), + + NORTH_EAST(Direction.NORTH, Direction.EAST), + EAST_SOUTH(Direction.EAST, Direction.SOUTH), + SOUTH_WEST(Direction.SOUTH, Direction.WEST), + WEST_NORTH(Direction.WEST, Direction.NORTH), + + UP_NORTH(Direction.UP, Direction.NORTH), + UP_EAST(Direction.UP, Direction.EAST), + UP_SOUTH(Direction.UP, Direction.SOUTH), + UP_WEST(Direction.UP, Direction.WEST), - private static final Direction[] NORTH_EAST = {Direction.NORTH, Direction.EAST}; - private static final Direction[] EAST_SOUTH = {Direction.EAST, Direction.SOUTH}; - private static final Direction[] SOUTH_WEST = {Direction.SOUTH, Direction.WEST}; - private static final Direction[] WEST_NORTH = {Direction.WEST, Direction.NORTH}; + DOWN_NORTH(Direction.DOWN, Direction.NORTH), + DOWN_EAST(Direction.DOWN, Direction.EAST), + DOWN_SOUTH(Direction.DOWN, Direction.SOUTH), + DOWN_WEST(Direction.DOWN, Direction.WEST) + ; - private static final Direction[] UP_NORTH = {Direction.UP, Direction.NORTH}; - private static final Direction[] UP_EAST = {Direction.UP, Direction.EAST}; - private static final Direction[] UP_SOUTH = {Direction.UP, Direction.SOUTH}; - private static final Direction[] UP_WEST = {Direction.UP, Direction.WEST}; + final Direction[] points; + private Connections(Direction... points){ + this.points = points; + } - private static final Direction[] DOWN_NORTH = {Direction.DOWN, Direction.NORTH}; - private static final Direction[] DOWN_EAST = {Direction.DOWN, Direction.EAST}; - private static final Direction[] DOWN_SOUTH = {Direction.DOWN, Direction.SOUTH}; - private static final Direction[] DOWN_WEST = {Direction.DOWN, Direction.WEST}; + public boolean compatibleWith(Connections other){ + return this.points[0] == other.points[1] || this.points[1] == other.points[0]; + } } public static enum Type implements Iterable{ @@ -163,21 +166,6 @@ public static enum Type implements Iterable{ INSULATORS_WEST_NORTH_SOUTH ), - STRAIGHT_FLOATING_FLOOR(FLOATING_DOWN_NORTH_SOUTH, FLOATING_DOWN_EAST_WEST), - STRAIGHT_FLOATING_CEILING(FLOATING_UP_NORTH_SOUTH, FLOATING_UP_EAST_WEST), - STRAIGHT_FLOATING_WALL_NORMAL( - FLOATING_NORTH_UP_DOWN, - FLOATING_EAST_UP_DOWN, - FLOATING_SOUTH_UP_DOWN, - FLOATING_WEST_UP_DOWN - ), - STRAIGHT_FLOATING_WALL_ROTATED( - FLOATING_NORTH_EAST_WEST, - FLOATING_EAST_NORTH_SOUTH, - FLOATING_SOUTH_EAST_WEST, - FLOATING_WEST_NORTH_SOUTH - ), - BENDS_FLOOR( BEND_DOWN_NORTH_EAST, BEND_DOWN_EAST_SOUTH, @@ -239,11 +227,6 @@ public static enum Type implements Iterable{ list.addAll(Arrays.asList(STRAIGHT_INSULATORS_WALL_NORMAL.shapes)); list.addAll(Arrays.asList(STRAIGHT_INSULATORS_WALL_ROTATED.shapes)); - list.addAll(Arrays.asList(STRAIGHT_FLOATING_FLOOR.shapes)); - list.addAll(Arrays.asList(STRAIGHT_FLOATING_CEILING.shapes)); - list.addAll(Arrays.asList(STRAIGHT_FLOATING_WALL_NORMAL.shapes)); - list.addAll(Arrays.asList(STRAIGHT_FLOATING_WALL_ROTATED.shapes)); - STRAIGHT_SEGMENTS = Collections.unmodifiableSet(list); } { From 5d67ca55b3ec7cce3ab0a6b9026f78d0ee31a9ba Mon Sep 17 00:00:00 2001 From: TwistedGate <31029668+TwistedGate@users.noreply.github.com> Date: Mon, 22 Aug 2022 13:23:41 +0200 Subject: [PATCH 10/26] Rough and broken, barebones implementation --- build.gradle | 5 +- .../common/data/OEBlockStates.java | 83 +++ .../common/data/OEItemModels.java | 23 +- .../overengineered/common/data/OERecipes.java | 55 ++ src/generated/resources/.cache/cache | 13 + .../overengineered/blockstates/busbar.json | 290 +++++++ .../models/block/busbar_bend.json | 9 + .../models/block/busbar_horizontal_down.json | 9 + .../models/block/busbar_horizontal_up.json | 9 + .../models/block/busbar_with_insulators.json | 9 + .../busbar_with_insulators_pre_y_rotated.json | 9 + .../block/busbar_without_insulators.json | 9 + ...sbar_without_insulators_pre_y_rotated.json | 9 + .../overengineered/models/item/busbar.json | 53 ++ .../recipes/overengineered/busbar.json | 60 ++ .../recipes/overengineered/busbar2.json | 60 ++ .../data/overengineered/recipes/busbar.json | 26 + .../data/overengineered/recipes/busbar2.json | 26 + .../overengineered/OverEngineered.java | 11 +- .../client/BlockRenderLayers.java | 27 + .../overengineered/common/OEContent.java | 6 + .../overengineered/common/OERegisters.java | 8 +- .../overengineered/common/OETileTypes.java | 6 + .../common/blocks/busbar/BusbarBlock.java | 181 +++++ .../common/blocks/busbar/BusbarState.java | 497 ++++++++++++ .../blocks/tileentity/BusbarTileEntity.java | 30 + .../blocks/tileentity/OETileEntityBase.java | 64 ++ .../utils/ExternalModContent.java | 39 + .../utils/enums/EnumBusbarShape.java | 299 ++++++++ .../assets/overengineered/lang/en_us.json | 3 + .../models/block/obj/busbar/busbar_a.obj | 351 +++++++++ .../models/block/obj/busbar/busbar_a_alt.obj | 351 +++++++++ .../models/block/obj/busbar/busbar_b.obj | 120 +++ .../models/block/obj/busbar/busbar_b_alt.obj | 120 +++ .../models/block/obj/busbar/busbar_bend.obj | 472 ++++++++++++ .../block/obj/busbar/busbar_edge_inside.obj | 705 ++++++++++++++++++ .../block/obj/busbar/busbar_edge_outside.obj | 207 +++++ .../block/obj/busbar/busconnector_lv_a.obj | 60 ++ .../block/obj/busbar/busconnector_lv_b.obj | 60 ++ .../block/obj/busbar/busconnector_lv_c.obj | 82 ++ .../block/obj/busbar/busconnector_mv_a.obj | 84 +++ .../block/obj/busbar/busconnector_mv_b.obj | 84 +++ .../block/obj/busbar/busconnector_mv_c.obj | 106 +++ .../models/block/obj/busbar/busmaterial.mtl | 2 + .../textures/block/obj/busbar.png | Bin 0 -> 266 bytes 45 files changed, 4715 insertions(+), 17 deletions(-) create mode 100644 src/generated/resources/.cache/cache create mode 100644 src/generated/resources/assets/overengineered/blockstates/busbar.json create mode 100644 src/generated/resources/assets/overengineered/models/block/busbar_bend.json create mode 100644 src/generated/resources/assets/overengineered/models/block/busbar_horizontal_down.json create mode 100644 src/generated/resources/assets/overengineered/models/block/busbar_horizontal_up.json create mode 100644 src/generated/resources/assets/overengineered/models/block/busbar_with_insulators.json create mode 100644 src/generated/resources/assets/overengineered/models/block/busbar_with_insulators_pre_y_rotated.json create mode 100644 src/generated/resources/assets/overengineered/models/block/busbar_without_insulators.json create mode 100644 src/generated/resources/assets/overengineered/models/block/busbar_without_insulators_pre_y_rotated.json create mode 100644 src/generated/resources/assets/overengineered/models/item/busbar.json create mode 100644 src/generated/resources/data/overengineered/advancements/recipes/overengineered/busbar.json create mode 100644 src/generated/resources/data/overengineered/advancements/recipes/overengineered/busbar2.json create mode 100644 src/generated/resources/data/overengineered/recipes/busbar.json create mode 100644 src/generated/resources/data/overengineered/recipes/busbar2.json create mode 100644 src/main/java/twistedgate/overengineered/client/BlockRenderLayers.java create mode 100644 src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java create mode 100644 src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarState.java create mode 100644 src/main/java/twistedgate/overengineered/common/blocks/tileentity/BusbarTileEntity.java create mode 100644 src/main/java/twistedgate/overengineered/common/blocks/tileentity/OETileEntityBase.java create mode 100644 src/main/java/twistedgate/overengineered/utils/ExternalModContent.java create mode 100644 src/main/java/twistedgate/overengineered/utils/enums/EnumBusbarShape.java create mode 100644 src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_a.obj create mode 100644 src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_a_alt.obj create mode 100644 src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_b.obj create mode 100644 src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_b_alt.obj create mode 100644 src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_bend.obj create mode 100644 src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_edge_inside.obj create mode 100644 src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_edge_outside.obj create mode 100644 src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_lv_a.obj create mode 100644 src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_lv_b.obj create mode 100644 src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_lv_c.obj create mode 100644 src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_mv_a.obj create mode 100644 src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_mv_b.obj create mode 100644 src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_mv_c.obj create mode 100644 src/main/resources/assets/overengineered/models/block/obj/busbar/busmaterial.mtl create mode 100644 src/main/resources/assets/overengineered/textures/block/obj/busbar.png diff --git a/build.gradle b/build.gradle index 0f9162a..bab4d24 100644 --- a/build.gradle +++ b/build.gradle @@ -106,8 +106,9 @@ minecraft{ data{ workingDirectory project.file('run') - property 'forge.logging.markers', 'REGISTRIES' - property 'forge.logging.console.level', 'debug' + property 'forge.logging.markers', '' + property 'forge.logging.console.level', 'info' + property 'fml.earlyprogresswindow', 'false' property 'mixin.env.remapRefMap', 'true' property 'mixin.env.refMapRemappingFile', "${projectDir}/build/createSrgToMcp/output.srg" diff --git a/src/datagen/java/twistedgate/overengineered/common/data/OEBlockStates.java b/src/datagen/java/twistedgate/overengineered/common/data/OEBlockStates.java index c6bf7ed..857887b 100644 --- a/src/datagen/java/twistedgate/overengineered/common/data/OEBlockStates.java +++ b/src/datagen/java/twistedgate/overengineered/common/data/OEBlockStates.java @@ -1,5 +1,7 @@ package twistedgate.overengineered.common.data; +import java.util.function.Function; + import javax.annotation.Nullable; import net.minecraft.data.DataGenerator; @@ -7,9 +9,15 @@ import net.minecraft.world.level.block.Block; import net.minecraftforge.client.model.generators.BlockModelBuilder; import net.minecraftforge.client.model.generators.BlockStateProvider; +import net.minecraftforge.client.model.generators.ConfiguredModel; +import net.minecraftforge.client.model.generators.VariantBlockStateBuilder; +import net.minecraftforge.client.model.generators.VariantBlockStateBuilder.PartialBlockstate; import net.minecraftforge.client.model.generators.loaders.OBJLoaderBuilder; import net.minecraftforge.common.data.ExistingFileHelper; import twistedgate.overengineered.OverEngineered; +import twistedgate.overengineered.common.OEContent; +import twistedgate.overengineered.common.blocks.busbar.BusbarBlock; +import twistedgate.overengineered.utils.enums.EnumBusbarShape; public class OEBlockStates extends BlockStateProvider{ final ExistingFileHelper exFileHelper; @@ -20,6 +28,81 @@ public OEBlockStates(DataGenerator gen, ExistingFileHelper exFileHelper){ @Override protected void registerStatesAndModels(){ + busbar(); + } + + private void busbar(){ + // Insulators + BlockModelBuilder model_insulators_normal = busModel("models/block/obj/busbar/busbar_a.obj", "_with_insulators"); + BlockModelBuilder model_insulators_rotated = busModel("models/block/obj/busbar/busbar_a_alt.obj", "_with_insulators_pre_y_rotated"); + + // Floating + BlockModelBuilder model_floating_normal = busModel("models/block/obj/busbar/busbar_b.obj", "_without_insulators"); + BlockModelBuilder model_floating_rotated = busModel("models/block/obj/busbar/busbar_b_alt.obj", "_without_insulators_pre_y_rotated"); + + BlockModelBuilder model_bend = busModel("models/block/obj/busbar/busbar_bend.obj", "_bend"); + BlockModelBuilder model_edge_inside = busModel("models/block/obj/busbar/busbar_edge_inside.obj", "_horizontal_up"); + BlockModelBuilder model_edge_outside = busModel("models/block/obj/busbar/busbar_edge_outside.obj", "_horizontal_down"); + + model_insulators_normal.assertExistence(); + model_insulators_rotated.assertExistence(); + + model_floating_normal.assertExistence(); + model_floating_rotated.assertExistence(); + + model_bend.assertExistence(); + model_edge_inside.assertExistence(); + model_edge_outside.assertExistence(); + + bus(EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH, model_insulators_normal, 0, 0); + bus(EnumBusbarShape.INSULATORS_DOWN_EAST_WEST, model_insulators_normal, 0, 90); + bus(EnumBusbarShape.INSULATORS_UP_NORTH_SOUTH, model_insulators_normal, 180, 0); + bus(EnumBusbarShape.INSULATORS_UP_EAST_WEST, model_insulators_normal, 180, 90); + + bus(EnumBusbarShape.FLOATING_DOWN_NORTH_SOUTH, model_floating_normal, 0, 0); + bus(EnumBusbarShape.FLOATING_DOWN_EAST_WEST, model_floating_normal, 0, 90); + bus(EnumBusbarShape.FLOATING_UP_NORTH_SOUTH, model_floating_normal, 180, 0); + bus(EnumBusbarShape.FLOATING_UP_EAST_WEST, model_floating_normal, 180, 90); + + EnumBusbarShape.Type.STRAIGHT_INSULATORS_WALL_NORMAL.forEachIndexed((i, shape) -> bus(shape, model_insulators_normal, -90, 90 * i)); + EnumBusbarShape.Type.STRAIGHT_INSULATORS_WALL_ROTATED.forEachIndexed((i, shape) -> bus(shape, model_insulators_rotated, -90, 90 * i)); + + EnumBusbarShape.Type.STRAIGHT_FLOATING_WALL_NORMAL.forEachIndexed((i, shape) -> bus(shape, model_floating_normal, -90, 90 * i)); + EnumBusbarShape.Type.STRAIGHT_FLOATING_WALL_ROTATED.forEachIndexed((i, shape) -> bus(shape, model_floating_rotated, -90, 90 * i)); + + EnumBusbarShape.Type.BENDS_FLOOR.forEachIndexed((i, shape) -> bus(shape, model_bend, 0, 90 + 90 * i)); + EnumBusbarShape.Type.BENDS_CEILING.forEachIndexed((i, shape) -> bus(shape, model_bend, 180, 180 + 90 * i)); + EnumBusbarShape.Type.BENDS_WALLS.forEachIndexed((i, shape) -> bus(shape, model_bend, -90, 90 * i)); + + EnumBusbarShape.Type.EDGE_INSIDE_FLOOR.forEachIndexed((i, shape) -> bus(shape, model_edge_inside, 0, 90 * i)); + EnumBusbarShape.Type.EDGE_INSIDE_CEILING.forEachIndexed((i, shape) -> bus(shape, model_edge_inside, 180, 90 * i)); + EnumBusbarShape.Type.EDGE_OUTSIDE_FLOOR.forEachIndexed((i, shape) -> bus(shape, model_edge_outside, 0, 90 * i)); + EnumBusbarShape.Type.EDGE_OUTSIDE_CEILING.forEachIndexed((i, shape) -> bus(shape, model_edge_outside, 180, 90 * i)); + } + + private PartialBlockstate bus(EnumBusbarShape shape, BlockModelBuilder model, int x_rot, int y_rot){ + VariantBlockStateBuilder builder = getVariantBuilder(OEContent.Blocks.BUSBAR.get()); + PartialBlockstate state = builder.partialState(); + + return state.with(BusbarBlock.SHAPE, shape) + .addModels(new ConfiguredModel(model, x_rot % 360, y_rot % 360, false)); + } + + // Could still be used for specific stuff + @SuppressWarnings("unused") + private PartialBlockstate bus(Function f, BlockModelBuilder model, int x_rot, int y_rot){ + VariantBlockStateBuilder builder = getVariantBuilder(OEContent.Blocks.BUSBAR.get()); + return f.apply(builder.partialState()).addModels(new ConfiguredModel(model, x_rot, y_rot, false)); + } + + @SuppressWarnings("unused") + @Deprecated(forRemoval = true) + private PartialBlockstate bus(PartialBlockstate state, BlockModelBuilder m0, BlockModelBuilder m1, boolean floating, int x_rot, int y_rot){ + return state.addModels(new ConfiguredModel(floating ? m1 : m0, x_rot, y_rot, false)); + } + + private BlockModelBuilder busModel(String modelPath, @Nullable String postFix){ + return objModel(OEContent.Blocks.BUSBAR.get(), modelPath, postFix, modLoc("block/obj/busbar")); } private BlockModelBuilder objModel(Block b, String modelPath, @Nullable String postFix, ResourceLocation texture){ diff --git a/src/datagen/java/twistedgate/overengineered/common/data/OEItemModels.java b/src/datagen/java/twistedgate/overengineered/common/data/OEItemModels.java index 8be649c..1334449 100644 --- a/src/datagen/java/twistedgate/overengineered/common/data/OEItemModels.java +++ b/src/datagen/java/twistedgate/overengineered/common/data/OEItemModels.java @@ -13,7 +13,7 @@ import net.minecraftforge.client.model.generators.loaders.OBJLoaderBuilder; import net.minecraftforge.common.data.ExistingFileHelper; import twistedgate.overengineered.OverEngineered; - +import twistedgate.overengineered.common.OEContent; public class OEItemModels extends ItemModelProvider{ public OEItemModels(DataGenerator generator, ExistingFileHelper existingFileHelper){ @@ -22,15 +22,18 @@ public OEItemModels(DataGenerator generator, ExistingFileHelper existingFileHelp @Override protected void registerModels(){ -// ModelBuilder.TransformsBuilder trans = model.transforms(); -// doTransform(trans, TransformType.FIRST_PERSON_LEFT_HAND, new Vector3f(0, 0, 0), new Vector3f(0, 45, 0), 1.0F); -// doTransform(trans, TransformType.FIRST_PERSON_RIGHT_HAND, new Vector3f(0, 0, 0), new Vector3f(0, 45, 0), 1.0F); -// doTransform(trans, TransformType.THIRD_PERSON_LEFT_HAND, null, null, 1.0F); -// doTransform(trans, TransformType.THIRD_PERSON_RIGHT_HAND, null, null, 1.0F); -// doTransform(trans, TransformType.HEAD, new Vector3f(0, 0, 0), null, 1.0F); -// doTransform(trans, TransformType.GUI, new Vector3f(0, 2, 0), new Vector3f(30, 45, 0), 0.75F); -// doTransform(trans, TransformType.GROUND, new Vector3f(0, 0, 0), null, 1.0F); -// doTransform(trans, TransformType.FIXED, new Vector3f(0, 0, -7), new Vector3f(-90, 0, 0), 1.0F); + ItemModelBuilder model = obj(OEContent.Blocks.BUSBAR.get(), "block/obj/busbar/busbar_a.obj") + .texture("texture", modLoc("block/obj/busbar")); + + ModelBuilder.TransformsBuilder trans = model.transforms(); + doTransform(trans, TransformType.FIRST_PERSON_LEFT_HAND, new Vector3f(0, 0, 0), new Vector3f(0, 45, 0), 1.0F); + doTransform(trans, TransformType.FIRST_PERSON_RIGHT_HAND, new Vector3f(0, 0, 0), new Vector3f(0, 45, 0), 1.0F); + doTransform(trans, TransformType.THIRD_PERSON_LEFT_HAND, null, null, 1.0F); + doTransform(trans, TransformType.THIRD_PERSON_RIGHT_HAND, null, null, 1.0F); + doTransform(trans, TransformType.HEAD, new Vector3f(0, 0, 0), null, 1.0F); + doTransform(trans, TransformType.GUI, new Vector3f(0, 2, 0), new Vector3f(30, 45, 0), 0.75F); + doTransform(trans, TransformType.GROUND, new Vector3f(0, 0, 0), null, 1.0F); + doTransform(trans, TransformType.FIXED, new Vector3f(0, 0, -7), new Vector3f(-90, 0, 0), 1.0F); } private void doTransform(ModelBuilder.TransformsBuilder transform, TransformType type, @Nullable Vector3f translation, @Nullable Vector3f rotationAngle, float scale){ diff --git a/src/datagen/java/twistedgate/overengineered/common/data/OERecipes.java b/src/datagen/java/twistedgate/overengineered/common/data/OERecipes.java index 108e3be..334aa90 100644 --- a/src/datagen/java/twistedgate/overengineered/common/data/OERecipes.java +++ b/src/datagen/java/twistedgate/overengineered/common/data/OERecipes.java @@ -1,18 +1,73 @@ package twistedgate.overengineered.common.data; +import java.util.HashMap; +import java.util.Map; import java.util.function.Consumer; +import blusunrize.immersiveengineering.api.wires.WireType; +import blusunrize.immersiveengineering.common.blocks.metal.BasicConnectorBlock; +import blusunrize.immersiveengineering.common.register.IEBlocks; +import blusunrize.immersiveengineering.common.register.IEBlocks.BlockEntry; import net.minecraft.data.DataGenerator; import net.minecraft.data.recipes.FinishedRecipe; import net.minecraft.data.recipes.RecipeProvider; +import net.minecraft.data.recipes.ShapedRecipeBuilder; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.Items; +import net.minecraft.world.level.ItemLike; +import twistedgate.overengineered.common.OEContent; +import twistedgate.overengineered.utils.ResourceUtils; public class OERecipes extends RecipeProvider{ + private final Map PATH_COUNT = new HashMap<>(); + public OERecipes(DataGenerator pGenerator){ super(pGenerator); } @Override protected void buildCraftingRecipes(Consumer out){ + BlockEntry> lv_relay = IEBlocks.Connectors.getEnergyConnector(WireType.LV_CATEGORY, true); + BlockEntry> mv_relay = IEBlocks.Connectors.getEnergyConnector(WireType.MV_CATEGORY, true); + + ShapedRecipeBuilder.shaped(OEContent.Blocks.BUSBAR.get(), 3) + .group("oe_busbar") + .pattern("CCC") + .pattern("LRM") + .define('C', Items.COPPER_INGOT) + .define('R', Items.RED_DYE) + .define('L', lv_relay) + .define('M', mv_relay) + .unlockedBy("has_copper_ingot", has(Items.COPPER_INGOT)) + .unlockedBy("has_" + toPath(lv_relay), has(lv_relay)) + .unlockedBy("has_" + toPath(mv_relay), has(mv_relay)) + .save(out, rl("busbar")); + ShapedRecipeBuilder.shaped(OEContent.Blocks.BUSBAR.get(), 3) + .group("oe_busbar") + .pattern("CCC") + .pattern("MRL") + .define('C', Items.COPPER_INGOT) + .define('R', Items.RED_DYE) + .define('L', lv_relay) + .define('M', mv_relay) + .unlockedBy("has_copper_ingot", has(Items.COPPER_INGOT)) + .unlockedBy("has_" + toPath(lv_relay), has(lv_relay)) + .unlockedBy("has_" + toPath(mv_relay), has(mv_relay)) + .save(out, rl("busbar")); + } + + private ResourceLocation rl(String str){ + if(PATH_COUNT.containsKey(str)){ + int count = PATH_COUNT.get(str) + 1; + PATH_COUNT.put(str, count); + return ResourceUtils.oe(str + count); + } + PATH_COUNT.put(str, 1); + return ResourceUtils.oe(str); + } + + private String toPath(ItemLike src){ + return src.asItem().getRegistryName().getPath(); } } diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache new file mode 100644 index 0000000..658c4fa --- /dev/null +++ b/src/generated/resources/.cache/cache @@ -0,0 +1,13 @@ +d8c80785920283e4fe9e0230b1f92e0824da0dff assets/overengineered/blockstates/busbar.json +165737f978732b3be1b991273410046a62c3602b assets/overengineered/models/block/busbar_bend.json +d38cc03cf37de4a0b62b6eb9167fb1282b38eedf assets/overengineered/models/block/busbar_horizontal_down.json +a3f79a2d4727885bc80374947d26cf1413cab082 assets/overengineered/models/block/busbar_horizontal_up.json +505c39a86a3e6ac0f2f99af30685e9ff435a7d3a assets/overengineered/models/block/busbar_with_insulators.json +83c90e24f79a0745afff4c0889ff8fb4c5191978 assets/overengineered/models/block/busbar_with_insulators_pre_y_rotated.json +67e6948440b91969741558fa0e319bfa0623ecdc assets/overengineered/models/block/busbar_without_insulators.json +95c68499016695a3c9c71e95d44b78e5a7b70abb assets/overengineered/models/block/busbar_without_insulators_pre_y_rotated.json +47d3511e428faccc03c73d493604da978bad617a assets/overengineered/models/item/busbar.json +f669ede4831f92d60da61cf680f634f40a2c6c2b data/overengineered/advancements/recipes/overengineered/busbar.json +84e62a1037f58c750ce069f12abdafe49f8be47b data/overengineered/advancements/recipes/overengineered/busbar2.json +9d6eee99845fd97468aa2085f9f4daa638d8cd7c data/overengineered/recipes/busbar.json +5fe8d5a4a47d15ce3dcc66fce0524cfca955107e data/overengineered/recipes/busbar2.json diff --git a/src/generated/resources/assets/overengineered/blockstates/busbar.json b/src/generated/resources/assets/overengineered/blockstates/busbar.json new file mode 100644 index 0000000..f66f7cf --- /dev/null +++ b/src/generated/resources/assets/overengineered/blockstates/busbar.json @@ -0,0 +1,290 @@ +{ + "variants": { + "shape=insulators_down_north_south": { + "model": "overengineered:block/busbar_with_insulators" + }, + "shape=insulators_down_east_west": { + "model": "overengineered:block/busbar_with_insulators", + "y": 90 + }, + "shape=insulators_up_north_south": { + "model": "overengineered:block/busbar_with_insulators", + "x": 180 + }, + "shape=insulators_up_east_west": { + "model": "overengineered:block/busbar_with_insulators", + "x": 180, + "y": 90 + }, + "shape=insulators_north_up_down": { + "model": "overengineered:block/busbar_with_insulators", + "x": -90 + }, + "shape=insulators_east_up_down": { + "model": "overengineered:block/busbar_with_insulators", + "x": -90, + "y": 90 + }, + "shape=insulators_south_up_down": { + "model": "overengineered:block/busbar_with_insulators", + "x": -90, + "y": 180 + }, + "shape=insulators_west_up_down": { + "model": "overengineered:block/busbar_with_insulators", + "x": -90, + "y": 270 + }, + "shape=insulators_north_east_west": { + "model": "overengineered:block/busbar_with_insulators_pre_y_rotated", + "x": -90 + }, + "shape=insulators_east_north_south": { + "model": "overengineered:block/busbar_with_insulators_pre_y_rotated", + "x": -90, + "y": 90 + }, + "shape=insulators_south_east_west": { + "model": "overengineered:block/busbar_with_insulators_pre_y_rotated", + "x": -90, + "y": 180 + }, + "shape=insulators_west_north_south": { + "model": "overengineered:block/busbar_with_insulators_pre_y_rotated", + "x": -90, + "y": 270 + }, + "shape=floating_down_north_south": { + "model": "overengineered:block/busbar_without_insulators" + }, + "shape=floating_down_east_west": { + "model": "overengineered:block/busbar_without_insulators", + "y": 90 + }, + "shape=floating_up_north_south": { + "model": "overengineered:block/busbar_without_insulators", + "x": 180 + }, + "shape=floating_up_east_west": { + "model": "overengineered:block/busbar_without_insulators", + "x": 180, + "y": 90 + }, + "shape=floating_north_up_down": { + "model": "overengineered:block/busbar_without_insulators", + "x": -90 + }, + "shape=floating_east_up_down": { + "model": "overengineered:block/busbar_without_insulators", + "x": -90, + "y": 90 + }, + "shape=floating_south_up_down": { + "model": "overengineered:block/busbar_without_insulators", + "x": -90, + "y": 180 + }, + "shape=floating_west_up_down": { + "model": "overengineered:block/busbar_without_insulators", + "x": -90, + "y": 270 + }, + "shape=floating_north_east_west": { + "model": "overengineered:block/busbar_without_insulators_pre_y_rotated", + "x": -90 + }, + "shape=floating_east_north_south": { + "model": "overengineered:block/busbar_without_insulators_pre_y_rotated", + "x": -90, + "y": 90 + }, + "shape=floating_south_east_west": { + "model": "overengineered:block/busbar_without_insulators_pre_y_rotated", + "x": -90, + "y": 180 + }, + "shape=floating_west_north_south": { + "model": "overengineered:block/busbar_without_insulators_pre_y_rotated", + "x": -90, + "y": 270 + }, + "shape=bend_down_north_east": { + "model": "overengineered:block/busbar_bend", + "y": 90 + }, + "shape=bend_down_east_south": { + "model": "overengineered:block/busbar_bend", + "y": 180 + }, + "shape=bend_down_south_west": { + "model": "overengineered:block/busbar_bend", + "y": 270 + }, + "shape=bend_down_west_north": { + "model": "overengineered:block/busbar_bend" + }, + "shape=bend_up_north_east": { + "model": "overengineered:block/busbar_bend", + "x": 180, + "y": 180 + }, + "shape=bend_up_east_south": { + "model": "overengineered:block/busbar_bend", + "x": 180, + "y": 270 + }, + "shape=bend_up_south_west": { + "model": "overengineered:block/busbar_bend", + "x": 180 + }, + "shape=bend_up_west_north": { + "model": "overengineered:block/busbar_bend", + "x": 180, + "y": 90 + }, + "shape=bend_north_down_east": { + "model": "overengineered:block/busbar_bend", + "x": -90 + }, + "shape=bend_north_east_up": { + "model": "overengineered:block/busbar_bend", + "x": -90, + "y": 90 + }, + "shape=bend_north_up_west": { + "model": "overengineered:block/busbar_bend", + "x": -90, + "y": 180 + }, + "shape=bend_north_west_down": { + "model": "overengineered:block/busbar_bend", + "x": -90, + "y": 270 + }, + "shape=bend_east_down_south": { + "model": "overengineered:block/busbar_bend", + "x": -90 + }, + "shape=bend_east_south_up": { + "model": "overengineered:block/busbar_bend", + "x": -90, + "y": 90 + }, + "shape=bend_east_up_north": { + "model": "overengineered:block/busbar_bend", + "x": -90, + "y": 180 + }, + "shape=bend_east_north_down": { + "model": "overengineered:block/busbar_bend", + "x": -90, + "y": 270 + }, + "shape=bend_south_down_west": { + "model": "overengineered:block/busbar_bend", + "x": -90 + }, + "shape=bend_south_west_up": { + "model": "overengineered:block/busbar_bend", + "x": -90, + "y": 90 + }, + "shape=bend_south_up_east": { + "model": "overengineered:block/busbar_bend", + "x": -90, + "y": 180 + }, + "shape=bend_south_east_down": { + "model": "overengineered:block/busbar_bend", + "x": -90, + "y": 270 + }, + "shape=bend_west_down_north": { + "model": "overengineered:block/busbar_bend", + "x": -90 + }, + "shape=bend_west_north_up": { + "model": "overengineered:block/busbar_bend", + "x": -90, + "y": 90 + }, + "shape=bend_west_up_south": { + "model": "overengineered:block/busbar_bend", + "x": -90, + "y": 180 + }, + "shape=bend_west_south_down": { + "model": "overengineered:block/busbar_bend", + "x": -90, + "y": 270 + }, + "shape=edge_inside_down_north_up_south": { + "model": "overengineered:block/busbar_horizontal_up", + "y": 180 + }, + "shape=edge_inside_down_east_up_west": { + "model": "overengineered:block/busbar_horizontal_up", + "y": 270 + }, + "shape=edge_inside_down_south_up_north": { + "model": "overengineered:block/busbar_horizontal_up" + }, + "shape=edge_inside_down_west_up_east": { + "model": "overengineered:block/busbar_horizontal_up", + "y": 90 + }, + "shape=edge_inside_up_north_down_south": { + "model": "overengineered:block/busbar_horizontal_up", + "x": 180 + }, + "shape=edge_inside_up_east_down_west": { + "model": "overengineered:block/busbar_horizontal_up", + "x": 180, + "y": 90 + }, + "shape=edge_inside_up_south_down_north": { + "model": "overengineered:block/busbar_horizontal_up", + "x": 180, + "y": 180 + }, + "shape=edge_inside_up_west_down_east": { + "model": "overengineered:block/busbar_horizontal_up", + "x": 180, + "y": 270 + }, + "shape=edge_outside_down_north_up_south": { + "model": "overengineered:block/busbar_horizontal_down" + }, + "shape=edge_outside_down_east_up_west": { + "model": "overengineered:block/busbar_horizontal_down", + "y": 90 + }, + "shape=edge_outside_down_south_up_north": { + "model": "overengineered:block/busbar_horizontal_down", + "y": 180 + }, + "shape=edge_outside_down_west_up_east": { + "model": "overengineered:block/busbar_horizontal_down", + "y": 270 + }, + "shape=edge_outside_up_north_down_south": { + "model": "overengineered:block/busbar_horizontal_down", + "x": 180 + }, + "shape=edge_outside_up_east_down_west": { + "model": "overengineered:block/busbar_horizontal_down", + "x": 180, + "y": 90 + }, + "shape=edge_outside_up_south_down_north": { + "model": "overengineered:block/busbar_horizontal_down", + "x": 180, + "y": 180 + }, + "shape=edge_outside_up_west_down_east": { + "model": "overengineered:block/busbar_horizontal_down", + "x": 180, + "y": 270 + } + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/overengineered/models/block/busbar_bend.json b/src/generated/resources/assets/overengineered/models/block/busbar_bend.json new file mode 100644 index 0000000..5680294 --- /dev/null +++ b/src/generated/resources/assets/overengineered/models/block/busbar_bend.json @@ -0,0 +1,9 @@ +{ + "textures": { + "texture": "overengineered:block/obj/busbar", + "particle": "overengineered:block/obj/busbar" + }, + "loader": "forge:obj", + "model": "overengineered:models/block/obj/busbar/busbar_bend.obj", + "flip-v": true +} \ No newline at end of file diff --git a/src/generated/resources/assets/overengineered/models/block/busbar_horizontal_down.json b/src/generated/resources/assets/overengineered/models/block/busbar_horizontal_down.json new file mode 100644 index 0000000..05ac416 --- /dev/null +++ b/src/generated/resources/assets/overengineered/models/block/busbar_horizontal_down.json @@ -0,0 +1,9 @@ +{ + "textures": { + "texture": "overengineered:block/obj/busbar", + "particle": "overengineered:block/obj/busbar" + }, + "loader": "forge:obj", + "model": "overengineered:models/block/obj/busbar/busbar_edge_outside.obj", + "flip-v": true +} \ No newline at end of file diff --git a/src/generated/resources/assets/overengineered/models/block/busbar_horizontal_up.json b/src/generated/resources/assets/overengineered/models/block/busbar_horizontal_up.json new file mode 100644 index 0000000..1a52db5 --- /dev/null +++ b/src/generated/resources/assets/overengineered/models/block/busbar_horizontal_up.json @@ -0,0 +1,9 @@ +{ + "textures": { + "texture": "overengineered:block/obj/busbar", + "particle": "overengineered:block/obj/busbar" + }, + "loader": "forge:obj", + "model": "overengineered:models/block/obj/busbar/busbar_edge_inside.obj", + "flip-v": true +} \ No newline at end of file diff --git a/src/generated/resources/assets/overengineered/models/block/busbar_with_insulators.json b/src/generated/resources/assets/overengineered/models/block/busbar_with_insulators.json new file mode 100644 index 0000000..ddc4de8 --- /dev/null +++ b/src/generated/resources/assets/overengineered/models/block/busbar_with_insulators.json @@ -0,0 +1,9 @@ +{ + "textures": { + "texture": "overengineered:block/obj/busbar", + "particle": "overengineered:block/obj/busbar" + }, + "loader": "forge:obj", + "model": "overengineered:models/block/obj/busbar/busbar_a.obj", + "flip-v": true +} \ No newline at end of file diff --git a/src/generated/resources/assets/overengineered/models/block/busbar_with_insulators_pre_y_rotated.json b/src/generated/resources/assets/overengineered/models/block/busbar_with_insulators_pre_y_rotated.json new file mode 100644 index 0000000..505bd1b --- /dev/null +++ b/src/generated/resources/assets/overengineered/models/block/busbar_with_insulators_pre_y_rotated.json @@ -0,0 +1,9 @@ +{ + "textures": { + "texture": "overengineered:block/obj/busbar", + "particle": "overengineered:block/obj/busbar" + }, + "loader": "forge:obj", + "model": "overengineered:models/block/obj/busbar/busbar_a_alt.obj", + "flip-v": true +} \ No newline at end of file diff --git a/src/generated/resources/assets/overengineered/models/block/busbar_without_insulators.json b/src/generated/resources/assets/overengineered/models/block/busbar_without_insulators.json new file mode 100644 index 0000000..69625dd --- /dev/null +++ b/src/generated/resources/assets/overengineered/models/block/busbar_without_insulators.json @@ -0,0 +1,9 @@ +{ + "textures": { + "texture": "overengineered:block/obj/busbar", + "particle": "overengineered:block/obj/busbar" + }, + "loader": "forge:obj", + "model": "overengineered:models/block/obj/busbar/busbar_b.obj", + "flip-v": true +} \ No newline at end of file diff --git a/src/generated/resources/assets/overengineered/models/block/busbar_without_insulators_pre_y_rotated.json b/src/generated/resources/assets/overengineered/models/block/busbar_without_insulators_pre_y_rotated.json new file mode 100644 index 0000000..908434e --- /dev/null +++ b/src/generated/resources/assets/overengineered/models/block/busbar_without_insulators_pre_y_rotated.json @@ -0,0 +1,9 @@ +{ + "textures": { + "texture": "overengineered:block/obj/busbar", + "particle": "overengineered:block/obj/busbar" + }, + "loader": "forge:obj", + "model": "overengineered:models/block/obj/busbar/busbar_b_alt.obj", + "flip-v": true +} \ No newline at end of file diff --git a/src/generated/resources/assets/overengineered/models/item/busbar.json b/src/generated/resources/assets/overengineered/models/item/busbar.json new file mode 100644 index 0000000..0e819b8 --- /dev/null +++ b/src/generated/resources/assets/overengineered/models/item/busbar.json @@ -0,0 +1,53 @@ +{ + "display": { + "firstperson_lefthand": { + "rotation": [ + 0, + 45, + 0 + ] + }, + "firstperson_righthand": { + "rotation": [ + 0, + 45, + 0 + ] + }, + "gui": { + "rotation": [ + 30, + 45, + 0 + ], + "translation": [ + 0, + 2, + 0 + ], + "scale": [ + 0.75, + 0.75, + 0.75 + ] + }, + "fixed": { + "rotation": [ + -90, + 0, + 0 + ], + "translation": [ + 0, + 0, + -7 + ] + } + }, + "textures": { + "texture": "overengineered:block/obj/busbar" + }, + "loader": "forge:obj", + "model": "overengineered:models/block/obj/busbar/busbar_a.obj", + "flip-v": true +} \ No newline at end of file diff --git a/src/generated/resources/data/overengineered/advancements/recipes/overengineered/busbar.json b/src/generated/resources/data/overengineered/advancements/recipes/overengineered/busbar.json new file mode 100644 index 0000000..d290180 --- /dev/null +++ b/src/generated/resources/data/overengineered/advancements/recipes/overengineered/busbar.json @@ -0,0 +1,60 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "overengineered:busbar" + ] + }, + "criteria": { + "has_copper_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "items": [ + "minecraft:copper_ingot" + ] + } + ] + } + }, + "has_connector_lv_relay": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "items": [ + "immersiveengineering:connector_lv_relay" + ] + } + ] + } + }, + "has_connector_mv_relay": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "items": [ + "immersiveengineering:connector_mv_relay" + ] + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "overengineered:busbar" + } + } + }, + "requirements": [ + [ + "has_copper_ingot", + "has_connector_lv_relay", + "has_connector_mv_relay", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/overengineered/advancements/recipes/overengineered/busbar2.json b/src/generated/resources/data/overengineered/advancements/recipes/overengineered/busbar2.json new file mode 100644 index 0000000..f336118 --- /dev/null +++ b/src/generated/resources/data/overengineered/advancements/recipes/overengineered/busbar2.json @@ -0,0 +1,60 @@ +{ + "parent": "minecraft:recipes/root", + "rewards": { + "recipes": [ + "overengineered:busbar2" + ] + }, + "criteria": { + "has_copper_ingot": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "items": [ + "minecraft:copper_ingot" + ] + } + ] + } + }, + "has_connector_lv_relay": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "items": [ + "immersiveengineering:connector_lv_relay" + ] + } + ] + } + }, + "has_connector_mv_relay": { + "trigger": "minecraft:inventory_changed", + "conditions": { + "items": [ + { + "items": [ + "immersiveengineering:connector_mv_relay" + ] + } + ] + } + }, + "has_the_recipe": { + "trigger": "minecraft:recipe_unlocked", + "conditions": { + "recipe": "overengineered:busbar2" + } + } + }, + "requirements": [ + [ + "has_copper_ingot", + "has_connector_lv_relay", + "has_connector_mv_relay", + "has_the_recipe" + ] + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/overengineered/recipes/busbar.json b/src/generated/resources/data/overengineered/recipes/busbar.json new file mode 100644 index 0000000..fa7efda --- /dev/null +++ b/src/generated/resources/data/overengineered/recipes/busbar.json @@ -0,0 +1,26 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "oe_busbar", + "pattern": [ + "CCC", + "LRM" + ], + "key": { + "C": { + "item": "minecraft:copper_ingot" + }, + "R": { + "item": "minecraft:red_dye" + }, + "L": { + "item": "immersiveengineering:connector_lv_relay" + }, + "M": { + "item": "immersiveengineering:connector_mv_relay" + } + }, + "result": { + "item": "overengineered:busbar", + "count": 3 + } +} \ No newline at end of file diff --git a/src/generated/resources/data/overengineered/recipes/busbar2.json b/src/generated/resources/data/overengineered/recipes/busbar2.json new file mode 100644 index 0000000..44d154d --- /dev/null +++ b/src/generated/resources/data/overengineered/recipes/busbar2.json @@ -0,0 +1,26 @@ +{ + "type": "minecraft:crafting_shaped", + "group": "oe_busbar", + "pattern": [ + "CCC", + "MRL" + ], + "key": { + "C": { + "item": "minecraft:copper_ingot" + }, + "R": { + "item": "minecraft:red_dye" + }, + "L": { + "item": "immersiveengineering:connector_lv_relay" + }, + "M": { + "item": "immersiveengineering:connector_mv_relay" + } + }, + "result": { + "item": "overengineered:busbar", + "count": 3 + } +} \ No newline at end of file diff --git a/src/main/java/twistedgate/overengineered/OverEngineered.java b/src/main/java/twistedgate/overengineered/OverEngineered.java index 728e977..2627694 100644 --- a/src/main/java/twistedgate/overengineered/OverEngineered.java +++ b/src/main/java/twistedgate/overengineered/OverEngineered.java @@ -9,7 +9,6 @@ import net.minecraft.world.item.CreativeModeTab; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.Items; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.event.server.ServerAboutToStartEvent; import net.minecraftforge.event.server.ServerStartedEvent; @@ -27,8 +26,9 @@ import twistedgate.overengineered.common.CommonProxy; import twistedgate.overengineered.common.OEContent; import twistedgate.overengineered.common.OERegisters; +import twistedgate.overengineered.common.OETileTypes; +import twistedgate.overengineered.utils.ExternalModContent; -// The value here should match an entry in the META-INF/mods.toml file @Mod(OverEngineered.MODID) public class OverEngineered{ public static final String MODID = "overengineered"; @@ -39,8 +39,7 @@ public class OverEngineered{ @Override @Nonnull public ItemStack makeIcon(){ - // TODO - return new ItemStack(Items.BARRIER); + return new ItemStack(OEContent.Blocks.BUSBAR.get()); } }; @@ -75,6 +74,7 @@ public OverEngineered(){ OERegisters.addRegistersToEventBus(eBus); OEContent.modConstruction(); + OETileTypes.forceClassLoad(); MinecraftForge.EVENT_BUS.register(this); } @@ -85,9 +85,12 @@ private void setup(final FMLCommonSetupEvent event){ proxy.preInit(); OEContent.init(event); + proxy.init(); proxy.postInit(); + + ExternalModContent.init(); } public void loadComplete(FMLLoadCompleteEvent event){ diff --git a/src/main/java/twistedgate/overengineered/client/BlockRenderLayers.java b/src/main/java/twistedgate/overengineered/client/BlockRenderLayers.java new file mode 100644 index 0000000..82747a7 --- /dev/null +++ b/src/main/java/twistedgate/overengineered/client/BlockRenderLayers.java @@ -0,0 +1,27 @@ +package twistedgate.overengineered.client; + +import java.util.function.Predicate; + +import net.minecraft.client.renderer.ItemBlockRenderTypes; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.world.level.block.Block; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; +import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; +import net.minecraftforge.registries.RegistryObject; +import twistedgate.overengineered.OverEngineered; +import twistedgate.overengineered.common.OEContent; + +@EventBusSubscriber(modid = OverEngineered.MODID, value = Dist.CLIENT, bus = Bus.MOD) +public class BlockRenderLayers{ + @SubscribeEvent + public static void clientSetup(FMLClientSetupEvent event){ + setRenderLayer(OEContent.Blocks.BUSBAR, t -> t == RenderType.cutout() || t == RenderType.solid()); + } + + private static void setRenderLayer(RegistryObject block, Predicate types){ + ItemBlockRenderTypes.setRenderLayer(block.get(), types); + } +} diff --git a/src/main/java/twistedgate/overengineered/common/OEContent.java b/src/main/java/twistedgate/overengineered/common/OEContent.java index 140d27f..b9b65ae 100644 --- a/src/main/java/twistedgate/overengineered/common/OEContent.java +++ b/src/main/java/twistedgate/overengineered/common/OEContent.java @@ -1,9 +1,15 @@ package twistedgate.overengineered.common; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.Item; import net.minecraftforge.fml.event.lifecycle.ParallelDispatchEvent; +import net.minecraftforge.registries.RegistryObject; +import twistedgate.overengineered.OverEngineered; +import twistedgate.overengineered.common.blocks.busbar.BusbarBlock; public class OEContent{ public static class Blocks{ + public static final RegistryObject BUSBAR = OERegisters.registerBlock("busbar", BusbarBlock::new, b -> new BlockItem(b, new Item.Properties().tab(OverEngineered.creativeTab))); private static void forceClassLoad(){ } diff --git a/src/main/java/twistedgate/overengineered/common/OERegisters.java b/src/main/java/twistedgate/overengineered/common/OERegisters.java index 0503599..7b0532c 100644 --- a/src/main/java/twistedgate/overengineered/common/OERegisters.java +++ b/src/main/java/twistedgate/overengineered/common/OERegisters.java @@ -44,10 +44,16 @@ public static void addRegistersToEventBus(IEventBus eventBus){ MOB_EFFECT.register(eventBus); } - protected static RegistryObject registerBlock(String name, Supplier blockConstructor){ + /** Registers a {@link Block} without a {@link BlockItem} */ + protected static RegistryObject registerSimpleBlock(String name, Supplier blockConstructor){ return registerBlock(name, blockConstructor, null); } + /** Registers a {@link Block} with a {@link BlockItem} being automaticly added to {@link OverEngineered#creativeTab} */ + protected static RegistryObject registerTabbedBlock(String name, Supplier blockConstructor, Item.Properties properties){ + return registerBlock(name, blockConstructor, b -> new BlockItem(b, properties.tab(OverEngineered.creativeTab))); + } + protected static RegistryObject registerBlock(String name, Supplier blockConstructor, @Nullable Function blockItem){ RegistryObject block = BLOCK_REGISTER.register(name, blockConstructor); if(blockItem != null){ diff --git a/src/main/java/twistedgate/overengineered/common/OETileTypes.java b/src/main/java/twistedgate/overengineered/common/OETileTypes.java index e2acd34..e01cf35 100644 --- a/src/main/java/twistedgate/overengineered/common/OETileTypes.java +++ b/src/main/java/twistedgate/overengineered/common/OETileTypes.java @@ -1,6 +1,12 @@ + package twistedgate.overengineered.common; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraftforge.registries.RegistryObject; +import twistedgate.overengineered.common.blocks.tileentity.BusbarTileEntity; + public class OETileTypes{ + public static final RegistryObject> BUS = OERegisters.registerTE("tile_bus", BusbarTileEntity::new, OEContent.Blocks.BUSBAR); public static void forceClassLoad(){ } diff --git a/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java b/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java new file mode 100644 index 0000000..71204e6 --- /dev/null +++ b/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java @@ -0,0 +1,181 @@ +package twistedgate.overengineered.common.blocks.busbar; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.EntityBlock; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition.Builder; +import net.minecraft.world.level.block.state.properties.EnumProperty; +import net.minecraft.world.level.material.Material; +import net.minecraft.world.level.material.MaterialColor; +import net.minecraft.world.level.material.PushReaction; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.Shapes; +import net.minecraft.world.phys.shapes.VoxelShape; +import twistedgate.overengineered.common.OETileTypes; +import twistedgate.overengineered.common.blocks.OEBlockBase; +import twistedgate.overengineered.common.blocks.tileentity.BusbarTileEntity; +import twistedgate.overengineered.utils.ExternalModContent; +import twistedgate.overengineered.utils.enums.EnumBusbarShape; + +public class BusbarBlock extends OEBlockBase implements EntityBlock{ + private static final Material MATERIAL = new Material(MaterialColor.METAL, false, false, true, true, false, false, PushReaction.BLOCK); + + public static final EnumProperty SHAPE = EnumProperty.create("shape", EnumBusbarShape.class); + + public BusbarBlock(){ + super(Block.Properties.of(MATERIAL).strength(2.0F, 10.0F).sound(SoundType.METAL).requiresCorrectToolForDrops()); + + registerDefaultState(getStateDefinition().any() + .setValue(SHAPE, EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH) + ); + } + + @Override + protected void createBlockStateDefinition(Builder builder){ + builder.add(SHAPE); + } + + @Override + public boolean propagatesSkylightDown(BlockState pState, BlockGetter pLevel, BlockPos pPos){ + return true; + } + + public static boolean isBusbar(Level level, BlockPos pos){ + return isBusbar(level.getBlockState(pos)); + } + + public static boolean isBusbar(BlockState state){ + return state.getBlock() instanceof BusbarBlock; + } + + @Override + public InteractionResult use(BlockState pState, Level pLevel, BlockPos pPos, Player pPlayer, InteractionHand pHand, BlockHitResult pHit){ + if(ExternalModContent.isIEHammer(pPlayer.getItemInHand(pHand))){ + EnumBusbarShape shape = pState.getValue(SHAPE); + if(EnumBusbarShape.Type.STRAIGHT_SEGMENTS.contains(shape)){ + EnumBusbarShape newShape = null; + + // @formatter:off + if(shape == EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH)newShape = EnumBusbarShape.FLOATING_DOWN_NORTH_SOUTH; + if(shape == EnumBusbarShape.FLOATING_DOWN_NORTH_SOUTH) newShape = EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH; + if(shape == EnumBusbarShape.INSULATORS_DOWN_EAST_WEST) newShape = EnumBusbarShape.FLOATING_DOWN_EAST_WEST; + if(shape == EnumBusbarShape.FLOATING_DOWN_EAST_WEST) newShape = EnumBusbarShape.INSULATORS_DOWN_EAST_WEST; + // @formatter:on + + if(newShape != null && newShape != shape){ + pLevel.setBlock(pPos, pState.setValue(SHAPE, newShape), 3); + return InteractionResult.SUCCESS; + } + } + + } + return InteractionResult.PASS; + } + + @Override + public BlockState getStateForPlacement(BlockPlaceContext pContext){ + Direction direction = pContext.getHorizontalDirection(); + Direction face = pContext.getClickedFace(); + + EnumBusbarShape shape = switch(face){ + case DOWN -> (direction == Direction.EAST || direction == Direction.WEST) ? EnumBusbarShape.INSULATORS_UP_EAST_WEST : EnumBusbarShape.INSULATORS_UP_NORTH_SOUTH; + case UP -> (direction == Direction.EAST || direction == Direction.WEST) ? EnumBusbarShape.INSULATORS_DOWN_EAST_WEST : EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH; + case NORTH -> EnumBusbarShape.INSULATORS_SOUTH_UP_DOWN; + case EAST -> EnumBusbarShape.INSULATORS_WEST_UP_DOWN; + case SOUTH -> EnumBusbarShape.INSULATORS_NORTH_UP_DOWN; + case WEST -> EnumBusbarShape.INSULATORS_EAST_UP_DOWN; + default -> EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH; + }; + + return defaultBlockState().setValue(SHAPE, shape); + } + + @Override + public void setPlacedBy(Level level, BlockPos pos, BlockState state, LivingEntity placer, ItemStack stack){ + } + + @Override + public void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean isMoving){ + state = updateDir(level, pos, state, true); + } + + private BlockState updateDir(Level level, BlockPos pos, BlockState state, boolean placing){ + if(level.isClientSide){ + return state; + }else{ + EnumBusbarShape shape = state.getValue(SHAPE); + return new BusbarState(level, pos, state).place(placing, shape).getState(); + } + } + + @Override + public void neighborChanged(BlockState stateIn, Level levelIn, BlockPos posIn, Block lastBlockIn, BlockPos fromPosIn, boolean isMovingIn){ + } + + @Override + public BlockEntity newBlockEntity(BlockPos pPos, BlockState pState){ + BusbarTileEntity te = OETileTypes.BUS.get().create(pPos, pState); + return te; + } + + @Override + public BlockEntityTicker getTicker(Level pLevel, BlockState pState, BlockEntityType pBlockEntityType){ + return createTickerHelper(pLevel.isClientSide, pBlockEntityType, OETileTypes.BUS); + } + + @Override + public VoxelShape getShape(BlockState pState, BlockGetter pLevel, BlockPos pPos, CollisionContext pContext){ + // TODO Cache them, compress and reuse duplicates + + // @formatter:off + switch(pState.getValue(SHAPE)){ + case INSULATORS_UP_NORTH_SOUTH: case FLOATING_UP_NORTH_SOUTH: { + return Shapes.create(0.125, 0.75, 0.0, 0.875, 1.0, 1.0); + } + case INSULATORS_DOWN_EAST_WEST: case FLOATING_DOWN_EAST_WEST:{ + return Shapes.create(0.0, 0.0, 0.125, 1.0, 0.25, 0.875); + } + case INSULATORS_UP_EAST_WEST: case FLOATING_UP_EAST_WEST:{ + return Shapes.create(0.0, 0.75, 0.125, 1.0, 1.0, 0.875); + } + case INSULATORS_DOWN_NORTH_SOUTH: case FLOATING_DOWN_NORTH_SOUTH:{ + return Shapes.create(0.125, 0.0, 0.0, 0.875, 0.25, 1.0); + } + + case INSULATORS_NORTH_UP_DOWN: return Shapes.create(0.125, 0.0, 0.0, 0.875, 1.0, 0.25); + case INSULATORS_EAST_UP_DOWN: return Shapes.create(0.75, 0.0, 0.125, 1.0, 1.0, 0.875); + case INSULATORS_SOUTH_UP_DOWN: return Shapes.create(0.125, 0.0, 0.75, 0.875, 1.0, 1.0); + case INSULATORS_WEST_UP_DOWN: return Shapes.create(0.0, 0.0, 0.125, 0.25, 1.0, 0.875); + + case BEND_DOWN_NORTH_EAST: return Shapes.create(0.125, 0.0, 0.0, 1.0, 0.25, 0.875); + case BEND_DOWN_EAST_SOUTH: return Shapes.create(0.125, 0.0, 0.125, 1.0, 0.25, 1.0); + case BEND_DOWN_SOUTH_WEST: return Shapes.create(0.0, 0.0, 0.125, 0.875, 0.25, 1.0); + case BEND_DOWN_WEST_NORTH: return Shapes.create(0.0, 0.0, 0.0, 0.875, 0.25, 0.875); + + case BEND_UP_NORTH_EAST: return Shapes.create(0.125, 0.75, 0.0, 1.0, 1.0, 0.875); + case BEND_UP_EAST_SOUTH: return Shapes.create(0.125, 0.75, 0.125, 1.0, 1.0, 1.0); + case BEND_UP_SOUTH_WEST: return Shapes.create(0.0, 0.75, 0.125, 0.875, 1.0, 1.0); + case BEND_UP_WEST_NORTH: return Shapes.create(0.0, 0.75, 0.0, 0.875, 1.0, 0.875); + + default:{ + return Shapes.create(0.0, 0.0, 0.0, 1.0, 1.0, 1.0); + } + } + // @formatter:on + } +} diff --git a/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarState.java b/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarState.java new file mode 100644 index 0000000..bf908b3 --- /dev/null +++ b/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarState.java @@ -0,0 +1,497 @@ +package twistedgate.overengineered.common.blocks.busbar; + +import java.util.ArrayList; +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.BaseRailBlock; +import net.minecraft.world.level.block.RailBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.RailShape; +import twistedgate.overengineered.OverEngineered; +import twistedgate.overengineered.utils.enums.EnumBusbarShape; + +public class BusbarState{ + private final List connections = new ArrayList<>(); + private final Level level; + private final BlockPos pos; + private final boolean isStraight; + private BlockState state; + public BusbarState(Level pLevel, BlockPos pPos, BlockState pState){ + this.level = pLevel; + this.pos = pPos; + this.state = pState; + + EnumBusbarShape shape = this.state.getValue(BusbarBlock.SHAPE); + + this.isStraight = !EnumBusbarShape.Type.STRAIGHT_SEGMENTS.contains(shape); + + updateConnections(shape); + } + + private boolean canConnectTo(BusbarState busState){ + return connectsTo(busState) || this.connections.size() != 2; + } + + private boolean connectsTo(BusbarState busState){ + return hasConnection(busState.pos); + } + + @Nullable + private BusbarState getBus(BlockPos pos){ + BlockState blockState = this.level.getBlockState(pos); + // TODO May need special cases for edges. (Left "original" below) + return BusbarBlock.isBusbar(blockState) ? new BusbarState(this.level, pos, blockState) : null; + + /* + if(BusbarBlock.isBusbar(blockState)){ + return new BusbarState(this.level, pos, blockState); + }else{ + BlockPos other = pos.above(); + blockState = this.level.getBlockState(other); + if(BusbarBlock.isBusbar(blockState)){ + return new BusbarState(this.level, other, blockState); + }else{ + other = pos.below(); + blockState = this.level.getBlockState(other); + return BusbarBlock.isBusbar(blockState) ? new BusbarState(this.level, other, blockState) : null; + } + } + */ + } + + public BlockState getState(){ + return this.state; + } + + private boolean hasConnection(BlockPos pos){ + for(int i = 0;i < this.connections.size();++i){ + BlockPos blockpos = this.connections.get(i); + if(blockpos.getX() == pos.getX() && blockpos.getZ() == pos.getZ()){ + return true; + } + } + return false; + } + + private boolean hasNeighborBus(BlockPos pos){ + BusbarState busState = getBus(pos); + if(busState == null){ + return false; + } + + busState.removeSoftConnections(); + return busState.canConnectTo(this); + } + + public BusbarState place(boolean placing, EnumBusbarShape shapeIn){ + BlockPos posDown = this.pos.below(); + BlockPos posUp = this.pos.above(); + BlockPos posNorth = this.pos.north(); + BlockPos posEast = this.pos.east(); + BlockPos posSouth = this.pos.south(); + BlockPos posWest = this.pos.west(); + + boolean hasDown = hasNeighborBus(posDown); + boolean hasUp = hasNeighborBus(posUp); + boolean hasNorth = hasNeighborBus(posNorth); + boolean hasEast = hasNeighborBus(posEast); + boolean hasSouth = hasNeighborBus(posSouth); + boolean hasWest = hasNeighborBus(posWest); + + EnumBusbarShape shape = null; + + boolean ns = hasNorth || hasSouth; + boolean ew = hasEast || hasWest; + boolean ud = hasUp || hasDown; + if(ns && !ew){ + shape = EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH; + } + if(ew && !ns){ + shape = EnumBusbarShape.INSULATORS_DOWN_EAST_WEST; + } + + boolean se = hasSouth && hasEast; + boolean sw = hasSouth && hasWest; + boolean ne = hasNorth && hasEast; + boolean nw = hasNorth && hasWest; + if(!this.isStraight){ + if(se && !hasNorth && !hasWest){ + shape = EnumBusbarShape.BEND_DOWN_EAST_SOUTH; + } + + if(sw && !hasNorth && !hasEast){ + shape = EnumBusbarShape.BEND_DOWN_SOUTH_WEST; + } + + if(nw && !hasSouth && !hasEast){ + shape = EnumBusbarShape.BEND_DOWN_WEST_NORTH; + } + + if(ne && !hasSouth && !hasWest){ + shape = EnumBusbarShape.BEND_DOWN_NORTH_EAST; + } + } + + if(shape == null){ + if(ns && ew){ + shape = shapeIn; + }else if(ns){ + shape = EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH; + }else if(ew){ + shape = EnumBusbarShape.INSULATORS_DOWN_EAST_WEST; + } + + if(!this.isStraight){ + if(nw){ + shape = EnumBusbarShape.BEND_DOWN_WEST_NORTH; + } + + if(ne){ + shape = EnumBusbarShape.BEND_DOWN_NORTH_EAST; + } + + if(sw){ + shape = EnumBusbarShape.BEND_DOWN_SOUTH_WEST; + } + + if(se){ + shape = EnumBusbarShape.BEND_DOWN_EAST_SOUTH; + } + } + } + + // ----------------------------------------------------------- + if(shape == null){ + shape = shapeIn; + } + + updateConnections(shape); + this.state = this.state.setValue(BusbarBlock.SHAPE, shape); + if(placing || this.level.getBlockState(this.pos) != this.state){ + this.level.setBlock(this.pos, this.state, 3); + + for(int i = 0;i < this.connections.size();i++){ + BusbarState busState = getBus(this.connections.get(i)); + if(busState != null){ + busState.removeSoftConnections(); + if(busState.canConnectTo(this)){ + busState.connectTo(this); + } + } + } + } + + return this; + } + + /** Temporary, just for peaking */ + @Deprecated(forRemoval = true) + public void /*RailState*/ place(){ + boolean pPowered = false, pPlaceBlock = false, canMakeSlopes = false; + RailShape pShape = null; + // Above would be the method args + //------------------------------------------------------------------------- + + BlockPos posNorth = this.pos.north(); + BlockPos posSouth = this.pos.south(); + BlockPos posWest = this.pos.west(); + BlockPos posEast = this.pos.east(); + boolean hasNorth = this.hasNeighborBus(posNorth); + boolean hasSouth = this.hasNeighborBus(posSouth); + boolean hasWest = this.hasNeighborBus(posWest); + boolean hasEast = this.hasNeighborBus(posEast); + boolean ns = hasNorth || hasSouth; + boolean ew = hasWest || hasEast; + + RailShape railshape = null; + + if(ns && !ew){ + railshape = RailShape.NORTH_SOUTH; + } + + if(ew && !ns){ + railshape = RailShape.EAST_WEST; + } + + boolean se = hasSouth && hasEast; + boolean sw = hasSouth && hasWest; + boolean ne = hasNorth && hasEast; + boolean nw = hasNorth && hasWest; + if(!this.isStraight){ + if(se && !hasNorth && !hasWest){ + railshape = RailShape.SOUTH_EAST; + } + + if(sw && !hasNorth && !hasEast){ + railshape = RailShape.SOUTH_WEST; + } + + if(nw && !hasSouth && !hasEast){ + railshape = RailShape.NORTH_WEST; + } + + if(ne && !hasSouth && !hasWest){ + railshape = RailShape.NORTH_EAST; + } + } + + if(railshape == null){ + if(ns && ew){ + railshape = pShape; + }else if(ns){ + railshape = RailShape.NORTH_SOUTH; + }else if(ew){ + railshape = RailShape.EAST_WEST; + } + + if(!this.isStraight){ + if(pPowered){ + if(se){ + railshape = RailShape.SOUTH_EAST; + } + + if(sw){ + railshape = RailShape.SOUTH_WEST; + } + + if(ne){ + railshape = RailShape.NORTH_EAST; + } + + if(nw){ + railshape = RailShape.NORTH_WEST; + } + }else{ + if(nw){ + railshape = RailShape.NORTH_WEST; + } + + if(ne){ + railshape = RailShape.NORTH_EAST; + } + + if(sw){ + railshape = RailShape.SOUTH_WEST; + } + + if(se){ + railshape = RailShape.SOUTH_EAST; + } + } + } + } + + if(railshape == RailShape.NORTH_SOUTH && canMakeSlopes){ + if(BaseRailBlock.isRail(this.level, posNorth.above())){ + railshape = RailShape.ASCENDING_NORTH; + } + + if(BaseRailBlock.isRail(this.level, posSouth.above())){ + railshape = RailShape.ASCENDING_SOUTH; + } + } + + if(railshape == RailShape.EAST_WEST && canMakeSlopes){ + if(BaseRailBlock.isRail(this.level, posEast.above())){ + railshape = RailShape.ASCENDING_EAST; + } + + if(BaseRailBlock.isRail(this.level, posWest.above())){ + railshape = RailShape.ASCENDING_WEST; + } + } + + if(railshape == null){ + railshape = pShape; + } + + //updateConnections(railshape); + this.state = this.state.setValue(RailBlock.SHAPE, railshape); + if(pPlaceBlock || this.level.getBlockState(this.pos) != this.state){ + this.level.setBlock(this.pos, this.state, 3); + + for(int i = 0;i < this.connections.size();++i){ + BusbarState busState = getBus(this.connections.get(i)); + if(busState != null){ + busState.removeSoftConnections(); + if(busState.canConnectTo(this)){ + busState.connectTo(this); + } + } + } + } + + //return this; + } + + private void connectTo(BusbarState state){ + this.connections.add(state.pos); + + BlockPos posDown = this.pos.below(); + BlockPos posUp = this.pos.above(); + BlockPos posNorth = this.pos.north(); + BlockPos posEast = this.pos.east(); + BlockPos posSouth = this.pos.south(); + BlockPos posWest = this.pos.west(); + + boolean conDown = hasConnection(posDown); + boolean conUp = hasConnection(posUp); + boolean conNorth = hasConnection(posNorth); + boolean conSouth = hasConnection(posSouth); + boolean conWest = hasConnection(posWest); + boolean conEast = hasConnection(posEast); + + EnumBusbarShape shape = null; + + if(conNorth || conSouth){ + shape = EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH; + } + if(conEast || conWest){ + shape = EnumBusbarShape.INSULATORS_DOWN_EAST_WEST; + } + + if(!this.isStraight){ + if(conSouth && conEast && !conNorth && !conWest){ + shape = EnumBusbarShape.BEND_DOWN_EAST_SOUTH; + } + + if(conSouth && conWest && !conNorth && !conEast){ + shape = EnumBusbarShape.BEND_DOWN_SOUTH_WEST; + } + + if(conNorth && conWest && !conSouth && !conEast){ + shape = EnumBusbarShape.BEND_DOWN_WEST_NORTH; + } + + if(conNorth && conEast && !conSouth && !conWest){ + shape = EnumBusbarShape.BEND_DOWN_NORTH_EAST; + } + } + + if(shape == null){ + shape = EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH; + } + + OverEngineered.log.debug( + "DEBUG\r\nconnectTo(\r\n\t" + + "Level: {}\r\n\t" + + "BlockState: {}\r\n\t" + + "Pos: {}\r\n\t" + + "Connections: {}\r\n)"+ + "{\r\n\t" + + "Level: {}\r\n\t" + + "State: {}\r\n\t" + + "Pos: {}\r\n\t" + + "Connections: {}\r\n\t" + + "Shape: {}\r\n" + + "}", + state.level, + state.state, + state.pos, + state.connections, + + this.level, + this.state, + this.pos, + this.connections, + shape + ); + + this.state = this.state.setValue(BusbarBlock.SHAPE, shape); + this.level.setBlock(this.pos, this.state, 3); + } + + /** Temporary, just for peaking */ + @SuppressWarnings({"null", "unused"}) + @Deprecated(forRemoval = true) + private void connectTo(){ + BusbarState pState = null; + // Above would be the method args + //------------------------------------------------------------------------- + + this.connections.add(pState.pos); + BlockPos posNorth = this.pos.north(); + BlockPos posSouth = this.pos.south(); + BlockPos posWest = this.pos.west(); + BlockPos posEast = this.pos.east(); + boolean conNorth = hasConnection(posNorth); + boolean conSouth = hasConnection(posSouth); + boolean conWest = hasConnection(posWest); + boolean conEast = hasConnection(posEast); + RailShape shape = null; + if(conNorth || conSouth){ + shape = RailShape.NORTH_SOUTH; + } + + if(conWest || conEast){ + shape = RailShape.EAST_WEST; + } + + if(!this.isStraight){ + if(conSouth && conEast && !conNorth && !conWest){ + shape = RailShape.SOUTH_EAST; + } + + if(conSouth && conWest && !conNorth && !conEast){ + shape = RailShape.SOUTH_WEST; + } + + if(conNorth && conWest && !conSouth && !conEast){ + shape = RailShape.NORTH_WEST; + } + + if(conNorth && conEast && !conSouth && !conWest){ + shape = RailShape.NORTH_EAST; + } + } + + /* + if(railshape == RailShape.NORTH_SOUTH && canMakeSlopes){ + if(BaseRailBlock.isRail(this.level, blockpos.above())){ + railshape = RailShape.ASCENDING_NORTH; + } + + if(BaseRailBlock.isRail(this.level, blockpos1.above())){ + railshape = RailShape.ASCENDING_SOUTH; + } + } + + if(railshape == RailShape.EAST_WEST && canMakeSlopes){ + if(BaseRailBlock.isRail(this.level, blockpos3.above())){ + railshape = RailShape.ASCENDING_EAST; + } + + if(BaseRailBlock.isRail(this.level, blockpos2.above())){ + railshape = RailShape.ASCENDING_WEST; + } + } + */ + + if(shape == null){ + shape = RailShape.NORTH_SOUTH; + } + +// this.state = this.state.setValue(BusbarBlock.SHAPE, railshape); +// this.level.setBlock(this.pos, this.state, 3); + } + + private void removeSoftConnections(){ + for(int i = 0;i < this.connections.size();i++){ + BusbarState busState = getBus(this.connections.get(i)); + if(busState != null && busState.connectsTo(this)){ + this.connections.set(i, busState.pos); + }else{ + this.connections.remove(i--); + } + } + } + + private void updateConnections(EnumBusbarShape shape){ + this.connections.clear(); + shape.connectionOffsets(this.connections, this.pos); + } +} diff --git a/src/main/java/twistedgate/overengineered/common/blocks/tileentity/BusbarTileEntity.java b/src/main/java/twistedgate/overengineered/common/blocks/tileentity/BusbarTileEntity.java new file mode 100644 index 0000000..f6b529a --- /dev/null +++ b/src/main/java/twistedgate/overengineered/common/blocks/tileentity/BusbarTileEntity.java @@ -0,0 +1,30 @@ +package twistedgate.overengineered.common.blocks.tileentity; + +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.level.block.state.BlockState; +import twistedgate.overengineered.common.OETileTypes; +import twistedgate.overengineered.common.blocks.ticking.OEClientTickableTile; +import twistedgate.overengineered.common.blocks.ticking.OEServerTickableTile; + +public class BusbarTileEntity extends OETileEntityBase implements OEServerTickableTile, OEClientTickableTile{ + public BusbarTileEntity(BlockPos pWorldPosition, BlockState pBlockState){ + super(OETileTypes.BUS.get(), pWorldPosition, pBlockState); + } + + @Override + protected void writeCustom(CompoundTag compound){ + } + + @Override + protected void readCustom(CompoundTag compound){ + } + + @Override + public void tickClient(){ + } + + @Override + public void tickServer(){ + } +} diff --git a/src/main/java/twistedgate/overengineered/common/blocks/tileentity/OETileEntityBase.java b/src/main/java/twistedgate/overengineered/common/blocks/tileentity/OETileEntityBase.java new file mode 100644 index 0000000..ba87a05 --- /dev/null +++ b/src/main/java/twistedgate/overengineered/common/blocks/tileentity/OETileEntityBase.java @@ -0,0 +1,64 @@ +package twistedgate.overengineered.common.blocks.tileentity; + +import java.util.Objects; + +import javax.annotation.Nonnull; + +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.Connection; +import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; + +public abstract class OETileEntityBase extends BlockEntity{ + public OETileEntityBase(BlockEntityType pType, BlockPos pWorldPosition, BlockState pBlockState){ + super(pType, pWorldPosition, pBlockState); + } + + @Nonnull + public Level getWorldNonnull(){ + return Objects.requireNonNull(super.getLevel()); + } + + @Override + public ClientboundBlockEntityDataPacket getUpdatePacket(){ + return ClientboundBlockEntityDataPacket.create(this, b -> getUpdateTag()); + } + + @Override + public void handleUpdateTag(CompoundTag tag){ + load(tag); + } + + @Override + @Nonnull + public CompoundTag getUpdateTag(){ + CompoundTag nbt = new CompoundTag(); + saveAdditional(nbt); + return nbt; + } + + @Override + public void onDataPacket(Connection net, ClientboundBlockEntityDataPacket pkt){ + if(pkt.getTag() != null) + load(pkt.getTag()); + } + + @Override + public void saveAdditional(@Nonnull CompoundTag compound){ + writeCustom(compound); + } + + @Override + public void load(@Nonnull CompoundTag compound){ + super.load(compound); + readCustom(compound); + } + + protected abstract void writeCustom(CompoundTag compound); + + protected abstract void readCustom(CompoundTag compound); +} diff --git a/src/main/java/twistedgate/overengineered/utils/ExternalModContent.java b/src/main/java/twistedgate/overengineered/utils/ExternalModContent.java new file mode 100644 index 0000000..1329926 --- /dev/null +++ b/src/main/java/twistedgate/overengineered/utils/ExternalModContent.java @@ -0,0 +1,39 @@ +package twistedgate.overengineered.utils; + +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +public class ExternalModContent{ + public static final RegistryObject IE_ITEM_HAMMER = RegistryObject.create(ResourceUtils.ie("hammer"), ForgeRegistries.ITEMS); + public static final RegistryObject IE_ITEM_WIRECUTTER = RegistryObject.create(ResourceUtils.ie("wirecutter"), ForgeRegistries.ITEMS); + public static final RegistryObject IE_ITEM_SCREWDRIVER = RegistryObject.create(ResourceUtils.ie("screwdriver"), ForgeRegistries.ITEMS); + + public static void init(){ + } + + public static boolean isIEHammer(ItemStack stack){ + return isIEHammer(stack.getItem()); + } + + public static boolean isIEHammer(Item item){ + return item.equals(IE_ITEM_HAMMER.get()); + } + + public static boolean isIEScrewdriver(ItemStack stack){ + return isIEHammer(stack.getItem()); + } + + public static boolean isIEScrewdriver(Item item){ + return item.equals(IE_ITEM_SCREWDRIVER.get()); + } + + public static boolean isIEWirecutter(ItemStack stack){ + return isIEHammer(stack.getItem()); + } + + public static boolean isIEWirecutter(Item item){ + return item.equals(IE_ITEM_WIRECUTTER.get()); + } +} \ No newline at end of file diff --git a/src/main/java/twistedgate/overengineered/utils/enums/EnumBusbarShape.java b/src/main/java/twistedgate/overengineered/utils/enums/EnumBusbarShape.java new file mode 100644 index 0000000..119ffa3 --- /dev/null +++ b/src/main/java/twistedgate/overengineered/utils/enums/EnumBusbarShape.java @@ -0,0 +1,299 @@ +package twistedgate.overengineered.utils.enums; + +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Set; +import java.util.function.BiConsumer; +import java.util.stream.Stream; + +import com.google.common.collect.Iterators; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.util.StringRepresentable; + +/** + * @author TwistedGate + */ +public enum EnumBusbarShape implements StringRepresentable{ + // @formatter:off + // Straights with Insulators (FACING_FROM_TO) + INSULATORS_DOWN_NORTH_SOUTH(ConnectionsPoints.NORTH_SOUTH), + INSULATORS_DOWN_EAST_WEST(ConnectionsPoints.EAST_WEST), + INSULATORS_UP_NORTH_SOUTH(ConnectionsPoints.NORTH_SOUTH), + INSULATORS_UP_EAST_WEST(ConnectionsPoints.EAST_WEST), + + INSULATORS_NORTH_UP_DOWN(ConnectionsPoints.UP_DOWN), + INSULATORS_EAST_UP_DOWN(ConnectionsPoints.UP_DOWN), + INSULATORS_SOUTH_UP_DOWN(ConnectionsPoints.UP_DOWN), + INSULATORS_WEST_UP_DOWN(ConnectionsPoints.UP_DOWN), + INSULATORS_NORTH_EAST_WEST(ConnectionsPoints.EAST_WEST), + INSULATORS_EAST_NORTH_SOUTH(ConnectionsPoints.NORTH_SOUTH), + INSULATORS_SOUTH_EAST_WEST(ConnectionsPoints.EAST_WEST), + INSULATORS_WEST_NORTH_SOUTH(ConnectionsPoints.NORTH_SOUTH), + + // Straights without Insulators (FACING_FROM_TO) + FLOATING_DOWN_NORTH_SOUTH(ConnectionsPoints.NORTH_SOUTH), + FLOATING_DOWN_EAST_WEST(ConnectionsPoints.EAST_WEST), + FLOATING_UP_NORTH_SOUTH(ConnectionsPoints.NORTH_SOUTH), + FLOATING_UP_EAST_WEST(ConnectionsPoints.EAST_WEST), + + FLOATING_NORTH_UP_DOWN(ConnectionsPoints.UP_DOWN), + FLOATING_EAST_UP_DOWN(ConnectionsPoints.UP_DOWN), + FLOATING_SOUTH_UP_DOWN(ConnectionsPoints.UP_DOWN), + FLOATING_WEST_UP_DOWN(ConnectionsPoints.UP_DOWN), + FLOATING_NORTH_EAST_WEST(ConnectionsPoints.EAST_WEST), + FLOATING_EAST_NORTH_SOUTH(ConnectionsPoints.NORTH_SOUTH), + FLOATING_SOUTH_EAST_WEST(ConnectionsPoints.EAST_WEST), + FLOATING_WEST_NORTH_SOUTH(ConnectionsPoints.NORTH_SOUTH), + + // 90° Bends (FACING_FROM_TO) + BEND_DOWN_NORTH_EAST(ConnectionsPoints.NORTH_EAST), + BEND_DOWN_EAST_SOUTH(ConnectionsPoints.EAST_SOUTH), + BEND_DOWN_SOUTH_WEST(ConnectionsPoints.SOUTH_WEST), + BEND_DOWN_WEST_NORTH(ConnectionsPoints.WEST_NORTH), + + BEND_UP_NORTH_EAST(ConnectionsPoints.NORTH_EAST), + BEND_UP_EAST_SOUTH(ConnectionsPoints.EAST_SOUTH), + BEND_UP_SOUTH_WEST(ConnectionsPoints.SOUTH_WEST), + BEND_UP_WEST_NORTH(ConnectionsPoints.WEST_NORTH), + + BEND_NORTH_DOWN_EAST(ConnectionsPoints.DOWN_EAST), + BEND_NORTH_EAST_UP(ConnectionsPoints.UP_EAST), + BEND_NORTH_UP_WEST(ConnectionsPoints.UP_WEST), + BEND_NORTH_WEST_DOWN(ConnectionsPoints.DOWN_WEST), + + BEND_EAST_DOWN_SOUTH(ConnectionsPoints.DOWN_SOUTH), + BEND_EAST_SOUTH_UP(ConnectionsPoints.UP_SOUTH), + BEND_EAST_UP_NORTH(ConnectionsPoints.UP_NORTH), + BEND_EAST_NORTH_DOWN(ConnectionsPoints.DOWN_NORTH), + + BEND_SOUTH_DOWN_WEST(ConnectionsPoints.DOWN_WEST), + BEND_SOUTH_WEST_UP(ConnectionsPoints.UP_WEST), + BEND_SOUTH_UP_EAST(ConnectionsPoints.UP_EAST), + BEND_SOUTH_EAST_DOWN(ConnectionsPoints.DOWN_EAST), + + BEND_WEST_DOWN_NORTH(ConnectionsPoints.DOWN_NORTH), + BEND_WEST_NORTH_UP(ConnectionsPoints.UP_NORTH), + BEND_WEST_UP_SOUTH(ConnectionsPoints.UP_SOUTH), + BEND_WEST_SOUTH_DOWN(ConnectionsPoints.DOWN_SOUTH), + + // Inside Edges (SIDE_FACING_FROM_TO) + EDGE_INSIDE_DOWN_NORTH_UP_SOUTH(ConnectionsPoints.UP_SOUTH), + EDGE_INSIDE_DOWN_EAST_UP_WEST(ConnectionsPoints.UP_WEST), + EDGE_INSIDE_DOWN_SOUTH_UP_NORTH(ConnectionsPoints.UP_NORTH), + EDGE_INSIDE_DOWN_WEST_UP_EAST(ConnectionsPoints.UP_EAST), + EDGE_INSIDE_UP_NORTH_DOWN_SOUTH(ConnectionsPoints.DOWN_SOUTH), + EDGE_INSIDE_UP_EAST_DOWN_WEST(ConnectionsPoints.DOWN_WEST), + EDGE_INSIDE_UP_SOUTH_DOWN_NORTH(ConnectionsPoints.DOWN_NORTH), + EDGE_INSIDE_UP_WEST_DOWN_EAST(ConnectionsPoints.DOWN_EAST), + + // Outside Edges (SIDE_FACING_FROM_TO) + EDGE_OUTSIDE_DOWN_NORTH_UP_SOUTH(ConnectionsPoints.UP_SOUTH), + EDGE_OUTSIDE_DOWN_EAST_UP_WEST(ConnectionsPoints.UP_WEST), + EDGE_OUTSIDE_DOWN_SOUTH_UP_NORTH(ConnectionsPoints.UP_NORTH), + EDGE_OUTSIDE_DOWN_WEST_UP_EAST(ConnectionsPoints.UP_EAST), + EDGE_OUTSIDE_UP_NORTH_DOWN_SOUTH(ConnectionsPoints.DOWN_SOUTH), + EDGE_OUTSIDE_UP_EAST_DOWN_WEST(ConnectionsPoints.DOWN_WEST), + EDGE_OUTSIDE_UP_SOUTH_DOWN_NORTH(ConnectionsPoints.DOWN_NORTH), + EDGE_OUTSIDE_UP_WEST_DOWN_EAST(ConnectionsPoints.DOWN_EAST), + ; + // @formatter:on + + private final String serialname; + private final Direction[] points; + private EnumBusbarShape(Direction... points){ + this.serialname = name().toLowerCase(); + this.points = points; + } + private EnumBusbarShape(String name, Direction... points){ + this.serialname = name; + this.points = points; + } + + public void connectionOffsets(final List list, BlockPos pos){ + for(Direction p:this.points){ + list.add(pos.relative(p)); + } + } + + @Override + public String getSerializedName(){ + return this.serialname; + } + + public static class ConnectionsPoints{ + private static final Direction[] NORTH_SOUTH = {Direction.NORTH, Direction.SOUTH}; + private static final Direction[] EAST_WEST = {Direction.EAST, Direction.WEST}; + private static final Direction[] UP_DOWN = {Direction.UP, Direction.DOWN}; + + private static final Direction[] NORTH_EAST = {Direction.NORTH, Direction.EAST}; + private static final Direction[] EAST_SOUTH = {Direction.EAST, Direction.SOUTH}; + private static final Direction[] SOUTH_WEST = {Direction.SOUTH, Direction.WEST}; + private static final Direction[] WEST_NORTH = {Direction.WEST, Direction.NORTH}; + + private static final Direction[] UP_NORTH = {Direction.UP, Direction.NORTH}; + private static final Direction[] UP_EAST = {Direction.UP, Direction.EAST}; + private static final Direction[] UP_SOUTH = {Direction.UP, Direction.SOUTH}; + private static final Direction[] UP_WEST = {Direction.UP, Direction.WEST}; + + private static final Direction[] DOWN_NORTH = {Direction.DOWN, Direction.NORTH}; + private static final Direction[] DOWN_EAST = {Direction.DOWN, Direction.EAST}; + private static final Direction[] DOWN_SOUTH = {Direction.DOWN, Direction.SOUTH}; + private static final Direction[] DOWN_WEST = {Direction.DOWN, Direction.WEST}; + } + + public static enum Type implements Iterable{ + // @formatter:off + STRAIGHT_INSULATORS_FLOOR(INSULATORS_DOWN_NORTH_SOUTH, INSULATORS_DOWN_EAST_WEST), + STRAIGHT_INSULATORS_CEILING(INSULATORS_UP_NORTH_SOUTH, INSULATORS_UP_EAST_WEST), + STRAIGHT_INSULATORS_WALL_NORMAL( + INSULATORS_NORTH_UP_DOWN, + INSULATORS_EAST_UP_DOWN, + INSULATORS_SOUTH_UP_DOWN, + INSULATORS_WEST_UP_DOWN + ), + STRAIGHT_INSULATORS_WALL_ROTATED( + INSULATORS_NORTH_EAST_WEST, + INSULATORS_EAST_NORTH_SOUTH, + INSULATORS_SOUTH_EAST_WEST, + INSULATORS_WEST_NORTH_SOUTH + ), + + STRAIGHT_FLOATING_FLOOR(FLOATING_DOWN_NORTH_SOUTH, FLOATING_DOWN_EAST_WEST), + STRAIGHT_FLOATING_CEILING(FLOATING_UP_NORTH_SOUTH, FLOATING_UP_EAST_WEST), + STRAIGHT_FLOATING_WALL_NORMAL( + FLOATING_NORTH_UP_DOWN, + FLOATING_EAST_UP_DOWN, + FLOATING_SOUTH_UP_DOWN, + FLOATING_WEST_UP_DOWN + ), + STRAIGHT_FLOATING_WALL_ROTATED( + FLOATING_NORTH_EAST_WEST, + FLOATING_EAST_NORTH_SOUTH, + FLOATING_SOUTH_EAST_WEST, + FLOATING_WEST_NORTH_SOUTH + ), + + BENDS_FLOOR( + BEND_DOWN_NORTH_EAST, + BEND_DOWN_EAST_SOUTH, + BEND_DOWN_SOUTH_WEST, + BEND_DOWN_WEST_NORTH + ), + BENDS_CEILING( + BEND_UP_NORTH_EAST, + BEND_UP_EAST_SOUTH, + BEND_UP_SOUTH_WEST, + BEND_UP_WEST_NORTH + ), + BENDS_WALLS( + BEND_NORTH_DOWN_EAST, BEND_NORTH_EAST_UP, BEND_NORTH_UP_WEST, BEND_NORTH_WEST_DOWN, + BEND_EAST_DOWN_SOUTH, BEND_EAST_SOUTH_UP, BEND_EAST_UP_NORTH, BEND_EAST_NORTH_DOWN, + BEND_SOUTH_DOWN_WEST, BEND_SOUTH_WEST_UP, BEND_SOUTH_UP_EAST, BEND_SOUTH_EAST_DOWN, + BEND_WEST_DOWN_NORTH, BEND_WEST_NORTH_UP, BEND_WEST_UP_SOUTH, BEND_WEST_SOUTH_DOWN + ), + BENDS_WALL_NORTH(BEND_NORTH_DOWN_EAST, BEND_NORTH_EAST_UP, BEND_NORTH_UP_WEST, BEND_NORTH_WEST_DOWN), + BENDS_WALL_EAST(BEND_EAST_DOWN_SOUTH, BEND_EAST_SOUTH_UP, BEND_EAST_UP_NORTH, BEND_EAST_NORTH_DOWN), + BENDS_WALL_SOUTH(BEND_SOUTH_DOWN_WEST, BEND_SOUTH_WEST_UP, BEND_SOUTH_UP_EAST, BEND_SOUTH_EAST_DOWN), + BENDS_WALL_WEST(BEND_WEST_DOWN_NORTH, BEND_WEST_NORTH_UP, BEND_WEST_UP_SOUTH, BEND_WEST_SOUTH_DOWN), + + EDGE_INSIDE_FLOOR( + EDGE_INSIDE_DOWN_SOUTH_UP_NORTH, + EDGE_INSIDE_DOWN_WEST_UP_EAST, + EDGE_INSIDE_DOWN_NORTH_UP_SOUTH, + EDGE_INSIDE_DOWN_EAST_UP_WEST + ), + EDGE_INSIDE_CEILING( + EDGE_INSIDE_UP_NORTH_DOWN_SOUTH, + EDGE_INSIDE_UP_EAST_DOWN_WEST, + EDGE_INSIDE_UP_SOUTH_DOWN_NORTH, + EDGE_INSIDE_UP_WEST_DOWN_EAST + ), + EDGE_OUTSIDE_FLOOR( + EDGE_OUTSIDE_DOWN_NORTH_UP_SOUTH, + EDGE_OUTSIDE_DOWN_EAST_UP_WEST, + EDGE_OUTSIDE_DOWN_SOUTH_UP_NORTH, + EDGE_OUTSIDE_DOWN_WEST_UP_EAST + ), + EDGE_OUTSIDE_CEILING( + EDGE_OUTSIDE_UP_NORTH_DOWN_SOUTH, + EDGE_OUTSIDE_UP_EAST_DOWN_WEST, + EDGE_OUTSIDE_UP_SOUTH_DOWN_NORTH, + EDGE_OUTSIDE_UP_WEST_DOWN_EAST + ) + ; + // @formatter:on + public static final Set STRAIGHT_SEGMENTS; + public static final Set BEND_SEGMENTS; + public static final Set EDGE_SEGMENTS; + static{ + { + HashSet list = new HashSet<>(); + + list.addAll(Arrays.asList(STRAIGHT_INSULATORS_FLOOR.shapes)); + list.addAll(Arrays.asList(STRAIGHT_INSULATORS_CEILING.shapes)); + list.addAll(Arrays.asList(STRAIGHT_INSULATORS_WALL_NORMAL.shapes)); + list.addAll(Arrays.asList(STRAIGHT_INSULATORS_WALL_ROTATED.shapes)); + + list.addAll(Arrays.asList(STRAIGHT_FLOATING_FLOOR.shapes)); + list.addAll(Arrays.asList(STRAIGHT_FLOATING_CEILING.shapes)); + list.addAll(Arrays.asList(STRAIGHT_FLOATING_WALL_NORMAL.shapes)); + list.addAll(Arrays.asList(STRAIGHT_FLOATING_WALL_ROTATED.shapes)); + + STRAIGHT_SEGMENTS = Collections.unmodifiableSet(list); + } + { + HashSet list = new HashSet<>(); + + list.addAll(Arrays.asList(BENDS_FLOOR.shapes)); + list.addAll(Arrays.asList(BENDS_CEILING.shapes)); + list.addAll(Arrays.asList(BENDS_WALLS.shapes)); + + BEND_SEGMENTS = Collections.unmodifiableSet(list); + } + { + HashSet list = new HashSet<>(); + + list.addAll(Arrays.asList(EDGE_INSIDE_FLOOR.shapes)); + list.addAll(Arrays.asList(EDGE_INSIDE_CEILING.shapes)); + list.addAll(Arrays.asList(EDGE_OUTSIDE_FLOOR.shapes)); + list.addAll(Arrays.asList(EDGE_OUTSIDE_CEILING.shapes)); + + EDGE_SEGMENTS = Collections.unmodifiableSet(list); + } + } + + private final EnumBusbarShape[] shapes; + private Type(EnumBusbarShape... shapes){ + this.shapes = shapes; + } + + public void forEachIndexed(BiConsumer consumer){ + for(int i = 0;i < this.shapes.length;i++){ + consumer.accept(i, shapes[i]); + } + } + + public boolean contains(EnumBusbarShape shape){ + for(int i = 0;i < this.shapes.length;i++){ + if(this.shapes[i] == shape){ + return true; + } + } + return false; + } + + @Override + public Iterator iterator(){ + return Iterators.forArray(this.shapes); + } + + public Stream stream(){ + return Arrays.stream(this.shapes); + } + } +} diff --git a/src/main/resources/assets/overengineered/lang/en_us.json b/src/main/resources/assets/overengineered/lang/en_us.json index 7a73a41..cdff664 100644 --- a/src/main/resources/assets/overengineered/lang/en_us.json +++ b/src/main/resources/assets/overengineered/lang/en_us.json @@ -1,2 +1,5 @@ { + "itemGroup.overengineered": "Over Engineered", + + "block.overengineered.busbar": "Busbar" } \ No newline at end of file diff --git a/src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_a.obj b/src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_a.obj new file mode 100644 index 0000000..ad3b48b --- /dev/null +++ b/src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_a.obj @@ -0,0 +1,351 @@ +# Blender v2.79 (sub 0) OBJ File: 'busbar.blend' +# www.blender.org +mtllib busmaterial.mtl +o busbar_isolators +v 0.562500 0.062500 0.562500 +v 0.531250 0.125000 0.531250 +v 0.562500 0.062500 0.437500 +v 0.531250 0.125000 0.468750 +v 0.437500 0.062500 0.437500 +v 0.468750 0.125000 0.468750 +v 0.468750 0.125000 0.531250 +v 0.437500 0.062500 0.562500 +v 0.531250 0.187500 0.468750 +v 0.562500 0.000000 0.437500 +v 0.531250 0.187500 0.531250 +v 0.562500 0.000000 0.562500 +v 0.468750 0.187500 0.468750 +v 0.437500 0.000000 0.437500 +v 0.468750 0.187500 0.531250 +v 0.437500 0.000000 0.562500 +v 0.125000 0.000000 0.562500 +v 0.156250 0.187500 0.531250 +v 0.125000 0.000000 0.437500 +v 0.156250 0.187500 0.468750 +v 0.250000 0.000000 0.562500 +v 0.218750 0.187500 0.531250 +v 0.250000 0.000000 0.437500 +v 0.218750 0.187500 0.468750 +v 0.125000 0.062500 0.562500 +v 0.156250 0.125000 0.531250 +v 0.156250 0.125000 0.468750 +v 0.125000 0.062500 0.437500 +v 0.218750 0.125000 0.468750 +v 0.250000 0.062500 0.437500 +v 0.218750 0.125000 0.531250 +v 0.250000 0.062500 0.562500 +v 0.875000 0.062500 0.562500 +v 0.843750 0.125000 0.531250 +v 0.875000 0.062500 0.437500 +v 0.843750 0.125000 0.468750 +v 0.750000 0.062500 0.437500 +v 0.781250 0.125000 0.468750 +v 0.781250 0.125000 0.531250 +v 0.750000 0.062500 0.562500 +v 0.843750 0.187500 0.468750 +v 0.875000 0.000000 0.437500 +v 0.843750 0.187500 0.531250 +v 0.875000 0.000000 0.562500 +v 0.781250 0.187500 0.468750 +v 0.750000 0.000000 0.437500 +v 0.781250 0.187500 0.531250 +v 0.750000 0.000000 0.562500 +vt 0.125000 0.062500 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.000000 0.062500 +vt 0.125000 0.062500 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.000000 0.062500 +vt 0.125000 0.000000 +vt 0.000000 0.000000 +vt 0.125000 0.000000 +vt 0.000000 0.000000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.312500 +vt 0.000000 0.312500 +vt 0.000000 0.187500 +vt 0.125000 0.187500 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.312500 +vt 0.000000 0.312500 +vt 0.000000 0.187500 +vt 0.125000 0.187500 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.062500 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.000000 0.062500 +vt 0.125000 0.062500 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.000000 0.062500 +vt 0.125000 0.000000 +vt 0.000000 0.000000 +vt 0.125000 0.000000 +vt 0.000000 0.000000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.312500 +vt 0.000000 0.312500 +vt 0.000000 0.187500 +vt 0.125000 0.187500 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vn 0.8944 0.4472 0.0000 +vn 0.0000 0.4472 0.8944 +vn 0.0000 0.0000 1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.4472 -0.8944 +vn -0.8944 0.4472 0.0000 +usemtl None +s off +f 3/1/1 4/2/1 2/3/1 1/4/1 +f 1/5/2 2/6/2 7/7/2 8/8/2 +f 12/9/3 1/5/3 8/8/3 16/10/3 +f 10/11/4 3/1/4 1/4/4 12/12/4 +f 14/13/5 5/14/5 3/15/5 10/16/5 +f 2/17/3 11/18/3 15/19/3 7/20/3 +f 6/21/5 13/22/5 9/23/5 4/24/5 +f 7/25/6 15/26/6 13/27/6 6/28/6 +f 4/29/4 9/30/4 11/31/4 2/32/4 +f 14/33/7 10/34/7 12/35/7 16/36/7 +f 26/37/6 18/38/6 20/39/6 27/40/6 +f 27/41/5 20/42/5 24/43/5 29/44/5 +f 29/45/4 24/46/4 22/47/4 31/48/4 +f 31/49/3 22/50/3 18/51/3 26/52/3 +f 19/53/7 23/54/7 21/55/7 17/56/7 +f 21/57/3 32/58/3 25/59/3 17/60/3 +f 32/58/2 31/61/2 26/62/2 25/59/2 +f 23/63/4 30/64/4 32/65/4 21/66/4 +f 30/64/1 29/67/1 31/68/1 32/65/1 +f 19/69/5 28/70/5 30/71/5 23/72/5 +f 28/70/8 27/73/8 29/74/8 30/71/8 +f 17/75/6 25/76/6 28/77/6 19/78/6 +f 25/76/9 26/79/9 27/80/9 28/77/9 +f 5/14/8 6/81/8 4/82/8 3/15/8 +f 16/83/6 8/84/6 5/85/6 14/86/6 +f 8/84/9 7/87/9 6/88/9 5/85/9 +f 35/89/1 36/90/1 34/91/1 33/92/1 +f 33/93/2 34/94/2 39/95/2 40/96/2 +f 44/97/3 33/93/3 40/96/3 48/98/3 +f 42/99/4 35/89/4 33/92/4 44/100/4 +f 46/101/5 37/102/5 35/103/5 42/104/5 +f 34/105/3 43/106/3 47/107/3 39/108/3 +f 38/109/5 45/110/5 41/111/5 36/112/5 +f 39/113/6 47/114/6 45/115/6 38/116/6 +f 36/117/4 41/118/4 43/119/4 34/120/4 +f 46/121/7 42/122/7 44/123/7 48/124/7 +f 37/102/8 38/125/8 36/126/8 35/103/8 +f 48/127/6 40/128/6 37/129/6 46/130/6 +f 40/128/9 39/131/9 38/132/9 37/129/9 +o busbar +v 0.437500 0.187500 1.000000 +v 0.437500 0.250000 1.000000 +v 0.437500 0.187500 0.000000 +v 0.437500 0.250000 0.000000 +v 0.562500 0.187500 1.000000 +v 0.562500 0.250000 1.000000 +v 0.562500 0.187500 0.000000 +v 0.562500 0.250000 0.000000 +v 0.125000 0.187500 1.000000 +v 0.125000 0.250000 1.000000 +v 0.125000 0.187500 0.000000 +v 0.125000 0.250000 0.000000 +v 0.250000 0.187500 1.000000 +v 0.250000 0.250000 1.000000 +v 0.250000 0.187500 0.000000 +v 0.250000 0.250000 0.000000 +v 0.750000 0.187500 1.000000 +v 0.750000 0.250000 1.000000 +v 0.750000 0.187500 0.000000 +v 0.750000 0.250000 0.000000 +v 0.875000 0.187500 1.000000 +v 0.875000 0.250000 1.000000 +v 0.875000 0.187500 0.000000 +v 0.875000 0.250000 0.000000 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.312500 0.875000 +vt 0.312500 0.812500 +vt 0.687500 0.812500 +vt 0.687500 0.875000 +vt 0.562500 0.875000 +vt 0.562500 0.812500 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.312500 0.875000 +vt 0.312500 0.812500 +vt 0.687500 0.812500 +vt 0.687500 0.875000 +vt 0.562500 0.875000 +vt 0.562500 0.812500 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.312500 0.875000 +vt 0.312500 0.812500 +vt 0.687500 0.812500 +vt 0.687500 0.875000 +vt 0.562500 0.875000 +vt 0.562500 0.812500 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 -1.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +usemtl None +s off +f 51/133/10 52/134/10 56/135/10 55/136/10 +f 53/137/11 54/138/11 50/139/11 49/140/11 +f 53/141/12 49/142/12 51/143/12 55/144/12 +f 51/145/13 49/146/13 50/147/13 52/148/13 +f 53/149/14 55/150/14 56/151/14 54/152/14 +f 56/151/15 52/153/15 50/154/15 54/152/15 +f 59/155/10 60/156/10 64/157/10 63/158/10 +f 61/159/11 62/160/11 58/161/11 57/162/11 +f 61/163/12 57/164/12 59/165/12 63/166/12 +f 59/167/13 57/168/13 58/169/13 60/170/13 +f 61/171/14 63/172/14 64/173/14 62/174/14 +f 64/173/15 60/175/15 58/176/15 62/174/15 +f 67/177/10 68/178/10 72/179/10 71/180/10 +f 69/181/11 70/182/11 66/183/11 65/184/11 +f 69/185/12 65/186/12 67/187/12 71/188/12 +f 67/189/13 65/190/13 66/191/13 68/192/13 +f 69/193/14 71/194/14 72/195/14 70/196/14 +f 72/195/15 68/197/15 66/198/15 70/196/15 diff --git a/src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_a_alt.obj b/src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_a_alt.obj new file mode 100644 index 0000000..1caeb04 --- /dev/null +++ b/src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_a_alt.obj @@ -0,0 +1,351 @@ +# Blender v2.79 (sub 0) OBJ File: 'busbar.blend' +# www.blender.org +mtllib busmaterial.mtl +o busbar_alt +v 0.000000 0.187500 0.437500 +v 0.000000 0.250000 0.437500 +v 1.000000 0.187500 0.437500 +v 1.000000 0.250000 0.437500 +v 0.000000 0.187500 0.562500 +v 0.000000 0.250000 0.562500 +v 1.000000 0.187500 0.562500 +v 1.000000 0.250000 0.562500 +v 0.000000 0.187500 0.125000 +v 0.000000 0.250000 0.125000 +v 1.000000 0.187500 0.125000 +v 1.000000 0.250000 0.125000 +v 0.000000 0.187500 0.250000 +v 0.000000 0.250000 0.250000 +v 1.000000 0.187500 0.250000 +v 1.000000 0.250000 0.250000 +v 0.000000 0.187500 0.750000 +v 0.000000 0.250000 0.750000 +v 1.000000 0.187500 0.750000 +v 1.000000 0.250000 0.750000 +v 0.000000 0.187500 0.875000 +v 0.000000 0.250000 0.875000 +v 1.000000 0.187500 0.875000 +v 1.000000 0.250000 0.875000 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.312500 0.875000 +vt 0.312500 0.812500 +vt 0.687500 0.812500 +vt 0.687500 0.875000 +vt 0.562500 0.875000 +vt 0.562500 0.812500 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.312500 0.875000 +vt 0.312500 0.812500 +vt 0.687500 0.812500 +vt 0.687500 0.875000 +vt 0.562500 0.875000 +vt 0.562500 0.812500 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.312500 0.875000 +vt 0.312500 0.812500 +vt 0.687500 0.812500 +vt 0.687500 0.875000 +vt 0.562500 0.875000 +vt 0.562500 0.812500 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 1.0000 0.0000 +usemtl None +s off +f 3/1/1 4/2/1 8/3/1 7/4/1 +f 5/5/2 6/6/2 2/7/2 1/8/2 +f 5/9/3 1/10/3 3/11/3 7/12/3 +f 3/13/4 1/14/4 2/15/4 4/16/4 +f 5/17/5 7/18/5 8/19/5 6/20/5 +f 8/19/6 4/21/6 2/22/6 6/20/6 +f 11/23/1 12/24/1 16/25/1 15/26/1 +f 13/27/2 14/28/2 10/29/2 9/30/2 +f 13/31/3 9/32/3 11/33/3 15/34/3 +f 11/35/4 9/36/4 10/37/4 12/38/4 +f 13/39/5 15/40/5 16/41/5 14/42/5 +f 16/41/6 12/43/6 10/44/6 14/42/6 +f 19/45/1 20/46/1 24/47/1 23/48/1 +f 21/49/2 22/50/2 18/51/2 17/52/2 +f 21/53/3 17/54/3 19/55/3 23/56/3 +f 19/57/4 17/58/4 18/59/4 20/60/4 +f 21/61/5 23/62/5 24/63/5 22/64/5 +f 24/63/6 20/65/6 18/66/6 22/64/6 +o busbar_isolators_alt +v 0.562500 0.062500 0.562500 +v 0.531250 0.125000 0.531250 +v 0.562500 0.062500 0.437500 +v 0.531250 0.125000 0.468750 +v 0.437500 0.062500 0.437500 +v 0.468750 0.125000 0.468750 +v 0.468750 0.125000 0.531250 +v 0.437500 0.062500 0.562500 +v 0.531250 0.187500 0.468750 +v 0.562500 0.000000 0.437500 +v 0.531250 0.187500 0.531250 +v 0.562500 0.000000 0.562500 +v 0.468750 0.187500 0.468750 +v 0.437500 0.000000 0.437500 +v 0.468750 0.187500 0.531250 +v 0.437500 0.000000 0.562500 +v 0.437500 0.000000 0.250000 +v 0.468750 0.187500 0.218750 +v 0.437500 0.000000 0.125000 +v 0.468750 0.187500 0.156250 +v 0.562500 0.000000 0.250000 +v 0.531250 0.187500 0.218750 +v 0.562500 0.000000 0.125000 +v 0.531250 0.187500 0.156250 +v 0.437500 0.062500 0.250000 +v 0.468750 0.125000 0.218750 +v 0.468750 0.125000 0.156250 +v 0.437500 0.062500 0.125000 +v 0.531250 0.125000 0.156250 +v 0.562500 0.062500 0.125000 +v 0.531250 0.125000 0.218750 +v 0.562500 0.062500 0.250000 +v 0.562500 0.062500 0.875000 +v 0.531250 0.125000 0.843750 +v 0.562500 0.062500 0.750000 +v 0.531250 0.125000 0.781250 +v 0.437500 0.062500 0.750000 +v 0.468750 0.125000 0.781250 +v 0.468750 0.125000 0.843750 +v 0.437500 0.062500 0.875000 +v 0.531250 0.187500 0.781250 +v 0.562500 0.000000 0.750000 +v 0.531250 0.187500 0.843750 +v 0.562500 0.000000 0.875000 +v 0.468750 0.187500 0.781250 +v 0.437500 0.000000 0.750000 +v 0.468750 0.187500 0.843750 +v 0.437500 0.000000 0.875000 +vt 0.125000 0.062500 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.000000 0.062500 +vt 0.125000 0.062500 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.000000 0.062500 +vt 0.125000 0.000000 +vt 0.000000 0.000000 +vt 0.125000 0.000000 +vt 0.000000 0.000000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.312500 +vt 0.000000 0.312500 +vt 0.000000 0.187500 +vt 0.125000 0.187500 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.312500 +vt 0.000000 0.312500 +vt 0.000000 0.187500 +vt 0.125000 0.187500 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.062500 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.000000 0.062500 +vt 0.125000 0.062500 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.000000 0.062500 +vt 0.125000 0.000000 +vt 0.000000 0.000000 +vt 0.125000 0.000000 +vt 0.000000 0.000000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.312500 +vt 0.000000 0.312500 +vt 0.000000 0.187500 +vt 0.125000 0.187500 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vn 0.8944 0.4472 0.0000 +vn 0.0000 0.4472 0.8944 +vn 0.0000 0.0000 1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.4472 -0.8944 +vn -0.8944 0.4472 0.0000 +usemtl None +s off +f 27/67/7 28/68/7 26/69/7 25/70/7 +f 25/71/8 26/72/8 31/73/8 32/74/8 +f 36/75/9 25/71/9 32/74/9 40/76/9 +f 34/77/10 27/67/10 25/70/10 36/78/10 +f 38/79/11 29/80/11 27/81/11 34/82/11 +f 26/83/9 35/84/9 39/85/9 31/86/9 +f 30/87/11 37/88/11 33/89/11 28/90/11 +f 31/91/12 39/92/12 37/93/12 30/94/12 +f 28/95/10 33/96/10 35/97/10 26/98/10 +f 38/99/13 34/100/13 36/101/13 40/102/13 +f 50/103/12 42/104/12 44/105/12 51/106/12 +f 51/107/11 44/108/11 48/109/11 53/110/11 +f 53/111/10 48/112/10 46/113/10 55/114/10 +f 55/115/9 46/116/9 42/117/9 50/118/9 +f 43/119/13 47/120/13 45/121/13 41/122/13 +f 45/123/9 56/124/9 49/125/9 41/126/9 +f 56/124/8 55/127/8 50/128/8 49/125/8 +f 47/129/10 54/130/10 56/131/10 45/132/10 +f 54/130/7 53/133/7 55/134/7 56/131/7 +f 43/135/11 52/136/11 54/137/11 47/138/11 +f 52/136/14 51/139/14 53/140/14 54/137/14 +f 41/141/12 49/142/12 52/143/12 43/144/12 +f 49/142/15 50/145/15 51/146/15 52/143/15 +f 29/80/14 30/147/14 28/148/14 27/81/14 +f 40/149/12 32/150/12 29/151/12 38/152/12 +f 32/150/15 31/153/15 30/154/15 29/151/15 +f 59/155/7 60/156/7 58/157/7 57/158/7 +f 57/159/8 58/160/8 63/161/8 64/162/8 +f 68/163/9 57/159/9 64/162/9 72/164/9 +f 66/165/10 59/155/10 57/158/10 68/166/10 +f 70/167/11 61/168/11 59/169/11 66/170/11 +f 58/171/9 67/172/9 71/173/9 63/174/9 +f 62/175/11 69/176/11 65/177/11 60/178/11 +f 63/179/12 71/180/12 69/181/12 62/182/12 +f 60/183/10 65/184/10 67/185/10 58/186/10 +f 70/187/13 66/188/13 68/189/13 72/190/13 +f 61/168/14 62/191/14 60/192/14 59/169/14 +f 72/193/12 64/194/12 61/195/12 70/196/12 +f 64/194/15 63/197/15 62/198/15 61/195/15 diff --git a/src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_b.obj b/src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_b.obj new file mode 100644 index 0000000..d5bdc8a --- /dev/null +++ b/src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_b.obj @@ -0,0 +1,120 @@ +# Blender v2.79 (sub 0) OBJ File: 'busbar.blend' +# www.blender.org +mtllib busmaterial.mtl +o busbar +v 0.437500 0.187500 1.000000 +v 0.437500 0.250000 1.000000 +v 0.437500 0.187500 0.000000 +v 0.437500 0.250000 0.000000 +v 0.562500 0.187500 1.000000 +v 0.562500 0.250000 1.000000 +v 0.562500 0.187500 0.000000 +v 0.562500 0.250000 0.000000 +v 0.125000 0.187500 1.000000 +v 0.125000 0.250000 1.000000 +v 0.125000 0.187500 0.000000 +v 0.125000 0.250000 0.000000 +v 0.250000 0.187500 1.000000 +v 0.250000 0.250000 1.000000 +v 0.250000 0.187500 0.000000 +v 0.250000 0.250000 0.000000 +v 0.750000 0.187500 1.000000 +v 0.750000 0.250000 1.000000 +v 0.750000 0.187500 0.000000 +v 0.750000 0.250000 0.000000 +v 0.875000 0.187500 1.000000 +v 0.875000 0.250000 1.000000 +v 0.875000 0.187500 0.000000 +v 0.875000 0.250000 0.000000 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.312500 0.875000 +vt 0.312500 0.812500 +vt 0.687500 0.812500 +vt 0.687500 0.875000 +vt 0.562500 0.875000 +vt 0.562500 0.812500 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.312500 0.875000 +vt 0.312500 0.812500 +vt 0.687500 0.812500 +vt 0.687500 0.875000 +vt 0.562500 0.875000 +vt 0.562500 0.812500 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.312500 0.875000 +vt 0.312500 0.812500 +vt 0.687500 0.812500 +vt 0.687500 0.875000 +vt 0.562500 0.875000 +vt 0.562500 0.812500 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 -1.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +usemtl None +s off +f 3/1/1 4/2/1 8/3/1 7/4/1 +f 5/5/2 6/6/2 2/7/2 1/8/2 +f 5/9/3 1/10/3 3/11/3 7/12/3 +f 3/13/4 1/14/4 2/15/4 4/16/4 +f 5/17/5 7/18/5 8/19/5 6/20/5 +f 8/19/6 4/21/6 2/22/6 6/20/6 +f 11/23/1 12/24/1 16/25/1 15/26/1 +f 13/27/2 14/28/2 10/29/2 9/30/2 +f 13/31/3 9/32/3 11/33/3 15/34/3 +f 11/35/4 9/36/4 10/37/4 12/38/4 +f 13/39/5 15/40/5 16/41/5 14/42/5 +f 16/41/6 12/43/6 10/44/6 14/42/6 +f 19/45/1 20/46/1 24/47/1 23/48/1 +f 21/49/2 22/50/2 18/51/2 17/52/2 +f 21/53/3 17/54/3 19/55/3 23/56/3 +f 19/57/4 17/58/4 18/59/4 20/60/4 +f 21/61/5 23/62/5 24/63/5 22/64/5 +f 24/63/6 20/65/6 18/66/6 22/64/6 diff --git a/src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_b_alt.obj b/src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_b_alt.obj new file mode 100644 index 0000000..0603a03 --- /dev/null +++ b/src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_b_alt.obj @@ -0,0 +1,120 @@ +# Blender v2.79 (sub 0) OBJ File: 'busbar.blend' +# www.blender.org +mtllib busmaterial.mtl +o busbar_alt +v 0.000000 0.187500 0.437500 +v 0.000000 0.250000 0.437500 +v 1.000000 0.187500 0.437500 +v 1.000000 0.250000 0.437500 +v 0.000000 0.187500 0.562500 +v 0.000000 0.250000 0.562500 +v 1.000000 0.187500 0.562500 +v 1.000000 0.250000 0.562500 +v 0.000000 0.187500 0.125000 +v 0.000000 0.250000 0.125000 +v 1.000000 0.187500 0.125000 +v 1.000000 0.250000 0.125000 +v 0.000000 0.187500 0.250000 +v 0.000000 0.250000 0.250000 +v 1.000000 0.187500 0.250000 +v 1.000000 0.250000 0.250000 +v 0.000000 0.187500 0.750000 +v 0.000000 0.250000 0.750000 +v 1.000000 0.187500 0.750000 +v 1.000000 0.250000 0.750000 +v 0.000000 0.187500 0.875000 +v 0.000000 0.250000 0.875000 +v 1.000000 0.187500 0.875000 +v 1.000000 0.250000 0.875000 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.312500 0.875000 +vt 0.312500 0.812500 +vt 0.687500 0.812500 +vt 0.687500 0.875000 +vt 0.562500 0.875000 +vt 0.562500 0.812500 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.312500 0.875000 +vt 0.312500 0.812500 +vt 0.687500 0.812500 +vt 0.687500 0.875000 +vt 0.562500 0.875000 +vt 0.562500 0.812500 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.312500 0.875000 +vt 0.312500 0.812500 +vt 0.687500 0.812500 +vt 0.687500 0.875000 +vt 0.562500 0.875000 +vt 0.562500 0.812500 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 0.875000 +vt 1.000000 1.000000 +vt 0.000000 1.000000 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 1.0000 0.0000 +usemtl None +s off +f 3/1/1 4/2/1 8/3/1 7/4/1 +f 5/5/2 6/6/2 2/7/2 1/8/2 +f 5/9/3 1/10/3 3/11/3 7/12/3 +f 3/13/4 1/14/4 2/15/4 4/16/4 +f 5/17/5 7/18/5 8/19/5 6/20/5 +f 8/19/6 4/21/6 2/22/6 6/20/6 +f 11/23/1 12/24/1 16/25/1 15/26/1 +f 13/27/2 14/28/2 10/29/2 9/30/2 +f 13/31/3 9/32/3 11/33/3 15/34/3 +f 11/35/4 9/36/4 10/37/4 12/38/4 +f 13/39/5 15/40/5 16/41/5 14/42/5 +f 16/41/6 12/43/6 10/44/6 14/42/6 +f 19/45/1 20/46/1 24/47/1 23/48/1 +f 21/49/2 22/50/2 18/51/2 17/52/2 +f 21/53/3 17/54/3 19/55/3 23/56/3 +f 19/57/4 17/58/4 18/59/4 20/60/4 +f 21/61/5 23/62/5 24/63/5 22/64/5 +f 24/63/6 20/65/6 18/66/6 22/64/6 diff --git a/src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_bend.obj b/src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_bend.obj new file mode 100644 index 0000000..04c293b --- /dev/null +++ b/src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_bend.obj @@ -0,0 +1,472 @@ +# Blender v2.79 (sub 0) OBJ File: 'busbar.blend' +# www.blender.org +mtllib busmaterial.mtl +o busbar_bend +v 0.437500 0.187500 0.562500 +v 0.437500 0.187500 0.000000 +v 0.437500 0.250000 0.000000 +v 0.562500 0.250000 0.562500 +v 0.562500 0.250000 0.000000 +v 0.125000 0.187500 0.250000 +v 0.125000 0.250000 0.250000 +v 0.125000 0.250000 0.000000 +v 0.250000 0.250000 0.250000 +v 0.250000 0.187500 0.000000 +v 0.250000 0.250000 0.000000 +v 0.750000 0.250000 0.000000 +v 0.875000 0.187500 0.000000 +v 0.875000 0.250000 0.000000 +v 0.562500 0.187500 0.562500 +v 0.000000 0.250000 0.562500 +v 0.000000 0.250000 0.437500 +v 0.250000 0.187500 0.250000 +v 0.000000 0.187500 0.250000 +v 0.000000 0.250000 0.250000 +v 0.000000 0.250000 0.125000 +v 0.875000 0.187500 0.875000 +v 0.875000 0.250000 0.875000 +v 0.875000 0.187500 0.750000 +v 0.875000 0.250000 0.750000 +v 0.750000 0.187500 0.750000 +v 0.750000 0.187500 0.875000 +v 0.750000 0.250000 0.875000 +v 0.750000 0.250000 0.750000 +v 0.437500 0.250000 0.562500 +v 0.437500 0.250000 0.437500 +v 0.562500 0.187500 0.437500 +v 0.562500 0.250000 0.437500 +v 0.437500 0.187500 0.437500 +v 0.125000 0.187500 0.125000 +v 0.250000 0.187500 0.125000 +v 0.250000 0.250000 0.125000 +v 0.125000 0.250000 0.125000 +v 0.000000 0.187500 0.562500 +v 0.000000 0.187500 0.750000 +v 0.000000 0.187500 0.875000 +v 0.000000 0.250000 0.875000 +v 0.000000 0.250000 0.750000 +v 0.000000 0.187500 0.437500 +v 0.000000 0.187500 0.125000 +v 0.125000 0.187500 0.000000 +v 0.562500 0.187500 0.000000 +v 0.750000 0.187500 0.000000 +vt 0.687500 0.812500 +vt 0.687500 0.875000 +vt 0.562500 0.875000 +vt 0.562500 0.812500 +vt 0.687500 0.812500 +vt 0.687500 0.875000 +vt 0.562500 0.875000 +vt 0.562500 0.812500 +vt 0.875000 1.000000 +vt 0.875000 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.875000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.875000 0.875000 +vt 0.000000 0.812500 +vt 0.750000 0.812500 +vt 0.750000 0.875000 +vt 0.000000 0.875000 +vt 0.687500 0.812500 +vt 0.687500 0.875000 +vt 0.562500 0.875000 +vt 0.562500 0.812500 +vt 0.687500 0.812500 +vt 0.687500 0.875000 +vt 0.562500 0.875000 +vt 0.562500 0.812500 +vt 0.875000 1.000000 +vt 0.875000 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.875000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.875000 0.875000 +vt 0.250000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.250000 0.875000 +vt 0.000000 0.812500 +vt 0.750000 0.812500 +vt 0.750000 0.875000 +vt 0.000000 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.250000 1.000000 +vt 0.250000 0.875000 +vt 0.875000 0.812500 +vt 0.875000 0.875000 +vt 1.000000 1.000000 +vt 0.250000 1.000000 +vt 0.250000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.250000 0.875000 +vt 0.250000 1.000000 +vt 0.125000 1.000000 +vt 0.125000 0.875000 +vt 0.125000 0.812500 +vt 0.250000 1.000000 +vt 0.250000 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.125000 1.000000 +vt 0.125000 0.875000 +vt 1.000000 1.000000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.562500 1.000000 +vt 0.562500 0.875000 +vt 0.562500 0.812500 +vt 1.000000 0.812500 +vt 0.000000 0.812500 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.000000 0.875000 +vt 0.562500 0.875000 +vt 0.562500 1.000000 +vt 0.437500 1.000000 +vt 0.437500 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.562500 1.000000 +vt 0.562500 0.875000 +vt 0.562500 0.812500 +vt 1.000000 0.812500 +vt 0.000000 0.812500 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.000000 0.875000 +vt 0.562500 1.000000 +vt 0.562500 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.437500 1.000000 +vt 0.437500 0.875000 +vt 1.000000 1.000000 +vt 0.875000 1.000000 +vt 0.750000 1.000000 +vt 0.750000 0.875000 +vt 0.000000 0.812500 +vt 0.125000 0.812500 +vt 0.125000 0.875000 +vt 0.000000 0.875000 +vt 0.750000 1.000000 +vt 0.750000 0.875000 +vt 1.000000 1.000000 +vt 0.875000 1.000000 +vt 0.000000 0.812500 +vt 0.125000 0.812500 +vt 0.125000 0.875000 +vt 0.000000 0.875000 +vt 0.750000 0.812500 +vt 0.875000 0.812500 +vt 0.875000 0.875000 +vt 0.750000 0.875000 +vt 0.437500 0.812500 +vt 0.562500 0.812500 +vt 0.562500 0.875000 +vt 0.437500 0.875000 +vt 0.125000 0.812500 +vt 0.250000 0.812500 +vt 0.250000 0.875000 +vt 0.125000 0.875000 +vt 0.750000 0.812500 +vt 0.875000 0.812500 +vt 0.875000 0.875000 +vt 0.750000 0.875000 +vt 0.437500 0.812500 +vt 0.562500 0.812500 +vt 0.562500 0.875000 +vt 0.437500 0.875000 +vt 0.125000 0.812500 +vt 0.250000 0.812500 +vt 0.250000 0.875000 +vt 0.125000 0.875000 +vn 0.0000 -0.0000 1.0000 +vn 0.0000 -1.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn -0.0000 -0.0000 -1.0000 +vn 0.0000 1.0000 0.0000 +usemtl None +s off +f 15/1/1 4/2/1 30/3/1 1/4/1 +f 18/5/1 9/6/1 7/7/1 6/8/1 +f 36/9/2 35/10/2 46/11/2 10/12/2 +f 36/13/3 10/14/3 11/15/3 37/16/3 +f 48/17/4 26/18/4 29/19/4 12/20/4 +f 32/21/3 33/22/3 4/23/3 15/24/3 +f 36/25/3 37/26/3 9/27/3 18/28/3 +f 35/29/2 6/30/2 19/31/2 45/32/2 +f 35/33/5 45/34/5 21/35/5 38/36/5 +f 26/37/5 40/38/5 43/39/5 29/40/5 +f 41/41/1 27/42/1 28/43/1 42/44/1 +f 41/45/2 40/46/2 26/47/2 27/48/2 +f 27/42/1 22/49/1 23/50/1 28/43/1 +f 43/39/6 42/51/6 28/52/6 29/40/6 +f 24/53/3 13/54/3 14/55/3 25/56/3 +f 25/56/6 29/57/6 28/58/6 23/59/6 +f 22/60/3 24/53/3 25/56/3 23/59/3 +f 24/61/2 26/62/2 48/63/2 13/64/2 +f 22/65/2 27/66/2 26/62/2 24/61/2 +f 29/57/6 25/56/6 14/55/6 12/67/6 +f 5/68/6 3/69/6 31/70/6 33/71/6 +f 32/72/3 47/73/3 5/68/3 33/71/3 +f 2/74/4 34/75/4 31/76/4 3/77/4 +f 34/78/2 32/79/2 15/80/2 1/81/2 +f 32/79/2 34/78/2 2/82/2 47/83/2 +f 17/84/6 16/85/6 30/86/6 31/87/6 +f 34/88/5 44/89/5 17/84/5 31/87/5 +f 39/90/1 1/91/1 30/92/1 16/93/1 +f 34/94/2 1/95/2 39/96/2 44/97/2 +f 30/98/6 4/99/6 33/71/6 31/70/6 +f 11/15/6 8/100/6 38/101/6 37/16/6 +f 37/16/6 38/101/6 7/102/6 9/103/6 +f 46/104/4 35/105/4 38/106/4 8/107/4 +f 18/108/2 6/109/2 35/10/2 36/9/2 +f 21/35/6 20/110/6 7/111/6 38/36/6 +f 19/112/1 6/113/1 7/114/1 20/115/1 +f 40/116/4 41/117/4 42/118/4 43/119/4 +f 44/120/4 39/121/4 16/122/4 17/123/4 +f 45/124/4 19/125/4 20/126/4 21/127/4 +f 10/128/5 46/129/5 8/130/5 11/131/5 +f 47/132/5 2/133/5 3/134/5 5/135/5 +f 13/136/5 48/137/5 12/138/5 14/139/5 +o busbar_insulators_corner +v 0.562500 0.062500 0.562500 +v 0.531250 0.125000 0.531250 +v 0.562500 0.062500 0.437500 +v 0.531250 0.125000 0.468750 +v 0.437500 0.062500 0.437500 +v 0.468750 0.125000 0.468750 +v 0.468750 0.125000 0.531250 +v 0.437500 0.062500 0.562500 +v 0.531250 0.187500 0.468750 +v 0.562500 0.000000 0.437500 +v 0.531250 0.187500 0.531250 +v 0.562500 0.000000 0.562500 +v 0.468750 0.187500 0.468750 +v 0.437500 0.000000 0.437500 +v 0.468750 0.187500 0.531250 +v 0.437500 0.000000 0.562500 +v 0.125000 0.000000 0.250000 +v 0.156250 0.187500 0.218750 +v 0.125000 0.000000 0.125000 +v 0.156250 0.187500 0.156250 +v 0.250000 0.000000 0.250000 +v 0.218750 0.187500 0.218750 +v 0.250000 0.000000 0.125000 +v 0.218750 0.187500 0.156250 +v 0.125000 0.062500 0.250000 +v 0.156250 0.125000 0.218750 +v 0.156250 0.125000 0.156250 +v 0.125000 0.062500 0.125000 +v 0.218750 0.125000 0.156250 +v 0.250000 0.062500 0.125000 +v 0.218750 0.125000 0.218750 +v 0.250000 0.062500 0.250000 +v 0.875000 0.062500 0.875000 +v 0.843750 0.125000 0.843750 +v 0.875000 0.062500 0.750000 +v 0.843750 0.125000 0.781250 +v 0.750000 0.062500 0.750000 +v 0.781250 0.125000 0.781250 +v 0.781250 0.125000 0.843750 +v 0.750000 0.062500 0.875000 +v 0.843750 0.187500 0.781250 +v 0.875000 0.000000 0.750000 +v 0.843750 0.187500 0.843750 +v 0.875000 0.000000 0.875000 +v 0.781250 0.187500 0.781250 +v 0.750000 0.000000 0.750000 +v 0.781250 0.187500 0.843750 +v 0.750000 0.000000 0.875000 +vt 0.125000 0.062500 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.000000 0.062500 +vt 0.125000 0.062500 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.000000 0.062500 +vt 0.125000 0.000000 +vt 0.000000 0.000000 +vt 0.125000 0.000000 +vt 0.000000 0.000000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.312500 +vt 0.000000 0.312500 +vt 0.000000 0.187500 +vt 0.125000 0.187500 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.312500 +vt 0.000000 0.312500 +vt 0.000000 0.187500 +vt 0.125000 0.187500 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.062500 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.000000 0.062500 +vt 0.125000 0.062500 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.000000 0.062500 +vt 0.125000 0.000000 +vt 0.000000 0.000000 +vt 0.125000 0.000000 +vt 0.000000 0.000000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.312500 +vt 0.000000 0.312500 +vt 0.000000 0.187500 +vt 0.125000 0.187500 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vn 0.8944 0.4472 0.0000 +vn 0.0000 0.4472 0.8944 +vn 0.0000 0.0000 1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.4472 -0.8944 +vn -0.8944 0.4472 0.0000 +usemtl None +s off +f 51/140/7 52/141/7 50/142/7 49/143/7 +f 49/144/8 50/145/8 55/146/8 56/147/8 +f 60/148/9 49/144/9 56/147/9 64/149/9 +f 58/150/10 51/140/10 49/143/10 60/151/10 +f 62/152/11 53/153/11 51/154/11 58/155/11 +f 50/156/9 59/157/9 63/158/9 55/159/9 +f 54/160/11 61/161/11 57/162/11 52/163/11 +f 55/164/12 63/165/12 61/166/12 54/167/12 +f 52/168/10 57/169/10 59/170/10 50/171/10 +f 62/172/13 58/173/13 60/174/13 64/175/13 +f 74/176/12 66/177/12 68/178/12 75/179/12 +f 75/180/11 68/181/11 72/182/11 77/183/11 +f 77/184/10 72/185/10 70/186/10 79/187/10 +f 79/188/9 70/189/9 66/190/9 74/191/9 +f 67/192/13 71/193/13 69/194/13 65/195/13 +f 69/196/9 80/197/9 73/198/9 65/199/9 +f 80/197/8 79/200/8 74/201/8 73/198/8 +f 71/202/10 78/203/10 80/204/10 69/205/10 +f 78/203/7 77/206/7 79/207/7 80/204/7 +f 67/208/11 76/209/11 78/210/11 71/211/11 +f 76/209/14 75/212/14 77/213/14 78/210/14 +f 65/214/12 73/215/12 76/216/12 67/217/12 +f 73/215/15 74/218/15 75/219/15 76/216/15 +f 53/153/14 54/220/14 52/221/14 51/154/14 +f 64/222/12 56/223/12 53/224/12 62/225/12 +f 56/223/15 55/226/15 54/227/15 53/224/15 +f 83/228/7 84/229/7 82/230/7 81/231/7 +f 81/232/8 82/233/8 87/234/8 88/235/8 +f 92/236/9 81/232/9 88/235/9 96/237/9 +f 90/238/10 83/228/10 81/231/10 92/239/10 +f 94/240/11 85/241/11 83/242/11 90/243/11 +f 82/244/9 91/245/9 95/246/9 87/247/9 +f 86/248/11 93/249/11 89/250/11 84/251/11 +f 87/252/12 95/253/12 93/254/12 86/255/12 +f 84/256/10 89/257/10 91/258/10 82/259/10 +f 94/260/13 90/261/13 92/262/13 96/263/13 +f 85/241/14 86/264/14 84/265/14 83/242/14 +f 96/266/12 88/267/12 85/268/12 94/269/12 +f 88/267/15 87/270/15 86/271/15 85/268/15 diff --git a/src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_edge_inside.obj b/src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_edge_inside.obj new file mode 100644 index 0000000..f931996 --- /dev/null +++ b/src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_edge_inside.obj @@ -0,0 +1,705 @@ +# Blender v2.79 (sub 0) OBJ File: 'busbar.blend' +# www.blender.org +mtllib busmaterial.mtl +o busbar_edge_inside +v 0.437500 0.187500 0.812500 +v 0.437500 0.250000 0.812500 +v 0.437500 0.187500 0.000000 +v 0.437500 0.250000 0.000000 +v 0.562500 0.187500 0.812500 +v 0.562500 0.250000 0.812500 +v 0.562500 0.187500 0.000000 +v 0.562500 0.250000 0.000000 +v 0.562500 1.000000 0.812500 +v 0.562500 1.000000 0.750000 +v 0.437500 1.000000 0.812500 +v 0.437500 1.000000 0.750000 +v 0.562500 0.250000 0.750000 +v 0.437500 0.250000 0.750000 +v 0.562500 0.187500 0.750000 +v 0.437500 0.187500 0.750000 +v 0.125000 0.187500 0.812500 +v 0.125000 0.250000 0.812500 +v 0.125000 0.187500 0.000000 +v 0.125000 0.250000 0.000000 +v 0.250000 0.187500 0.812500 +v 0.250000 0.250000 0.812500 +v 0.250000 0.187500 0.000000 +v 0.250000 0.250000 0.000000 +v 0.250000 1.000000 0.812500 +v 0.250000 1.000000 0.750000 +v 0.125000 1.000000 0.812500 +v 0.125000 1.000000 0.750000 +v 0.250000 0.250000 0.750000 +v 0.125000 0.250000 0.750000 +v 0.250000 0.187500 0.750000 +v 0.125000 0.187500 0.750000 +v 0.750000 0.187500 0.812500 +v 0.750000 0.250000 0.812500 +v 0.750000 0.187500 0.000000 +v 0.750000 0.250000 0.000000 +v 0.875000 0.187500 0.812500 +v 0.875000 0.250000 0.812500 +v 0.875000 0.187500 0.000000 +v 0.875000 0.250000 0.000000 +v 0.875000 1.000000 0.812500 +v 0.875000 1.000000 0.750000 +v 0.750000 1.000000 0.812500 +v 0.750000 1.000000 0.750000 +v 0.875000 0.250000 0.750000 +v 0.750000 0.250000 0.750000 +v 0.875000 0.187500 0.750000 +v 0.750000 0.187500 0.750000 +vt 0.687500 0.812500 +vt 0.687500 0.875000 +vt 0.562500 0.875000 +vt 0.562500 0.812500 +vt 0.937500 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.937500 0.875000 +vt 0.250000 1.000000 +vt 0.250000 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.250000 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.250000 1.000000 +vt 0.250000 0.812500 +vt 1.000000 0.812500 +vt 0.000000 0.812500 +vt 0.750000 0.812500 +vt 0.750000 0.875000 +vt 0.000000 0.875000 +vt 0.250000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.250000 0.875000 +vt 0.250000 1.000000 +vt 1.000000 1.000000 +vt 0.250000 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.250000 1.000000 +vt 0.000000 0.812500 +vt 0.750000 0.812500 +vt 0.750000 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.875000 +vt 0.062500 0.875000 +vt 0.062500 1.000000 +vt 0.000000 1.000000 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.312500 0.875000 +vt 0.312500 0.812500 +vt 0.000000 0.812500 +vt 0.062500 0.812500 +vt 0.062500 0.875000 +vt 0.000000 0.875000 +vt 0.687500 0.812500 +vt 0.687500 0.875000 +vt 0.562500 0.875000 +vt 0.562500 0.812500 +vt 0.937500 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.937500 0.875000 +vt 0.250000 1.000000 +vt 0.250000 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.250000 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.250000 1.000000 +vt 0.250000 0.812500 +vt 1.000000 0.812500 +vt 0.000000 0.812500 +vt 0.750000 0.812500 +vt 0.750000 0.875000 +vt 0.000000 0.875000 +vt 0.250000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.250000 0.875000 +vt 0.250000 1.000000 +vt 1.000000 1.000000 +vt 0.250000 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.250000 1.000000 +vt 0.000000 0.812500 +vt 0.750000 0.812500 +vt 0.750000 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.875000 +vt 0.062500 0.875000 +vt 0.062500 1.000000 +vt 0.000000 1.000000 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.312500 0.875000 +vt 0.312500 0.812500 +vt 0.000000 0.812500 +vt 0.062500 0.812500 +vt 0.062500 0.875000 +vt 0.000000 0.875000 +vt 0.687500 0.812500 +vt 0.687500 0.875000 +vt 0.562500 0.875000 +vt 0.562500 0.812500 +vt 0.937500 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.937500 0.875000 +vt 0.250000 1.000000 +vt 0.250000 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.250000 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.250000 1.000000 +vt 0.250000 0.812500 +vt 1.000000 0.812500 +vt 0.000000 0.812500 +vt 0.750000 0.812500 +vt 0.750000 0.875000 +vt 0.000000 0.875000 +vt 0.250000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.250000 0.875000 +vt 0.250000 1.000000 +vt 1.000000 1.000000 +vt 0.250000 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.250000 1.000000 +vt 0.000000 0.812500 +vt 0.750000 0.812500 +vt 0.750000 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.875000 +vt 0.062500 0.875000 +vt 0.062500 1.000000 +vt 0.000000 1.000000 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.312500 0.875000 +vt 0.312500 0.812500 +vt 0.000000 0.812500 +vt 0.062500 0.812500 +vt 0.062500 0.875000 +vt 0.000000 0.875000 +vn 0.0000 0.0000 1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +usemtl None +s off +f 5/1/1 6/2/1 2/3/1 1/4/1 +f 16/5/2 1/6/2 2/7/2 14/8/2 +f 14/9/3 13/10/3 8/11/3 4/12/3 +f 16/13/4 3/14/4 7/15/4 15/16/4 +f 15/17/5 7/18/5 8/11/5 13/10/5 +f 12/19/2 14/20/2 2/21/2 11/22/2 +f 13/23/5 10/24/5 9/25/5 6/26/5 +f 2/27/1 6/26/1 9/25/1 11/28/1 +f 14/29/6 12/30/6 10/31/6 13/32/6 +f 3/33/2 16/34/2 14/35/2 4/36/2 +f 1/37/4 16/38/4 15/39/4 5/40/4 +f 12/41/3 11/42/3 9/43/3 10/44/3 +f 5/45/5 15/46/5 13/47/5 6/48/5 +f 21/49/1 22/50/1 18/51/1 17/52/1 +f 32/53/2 17/54/2 18/55/2 30/56/2 +f 30/57/3 29/58/3 24/59/3 20/60/3 +f 32/61/4 19/62/4 23/63/4 31/64/4 +f 31/65/5 23/66/5 24/59/5 29/58/5 +f 28/67/2 30/68/2 18/69/2 27/70/2 +f 29/71/5 26/72/5 25/73/5 22/74/5 +f 18/75/1 22/74/1 25/73/1 27/76/1 +f 30/77/6 28/78/6 26/79/6 29/80/6 +f 19/81/2 32/82/2 30/83/2 20/84/2 +f 17/85/4 32/86/4 31/87/4 21/88/4 +f 28/89/3 27/90/3 25/91/3 26/92/3 +f 21/93/5 31/94/5 29/95/5 22/96/5 +f 37/97/1 38/98/1 34/99/1 33/100/1 +f 48/101/2 33/102/2 34/103/2 46/104/2 +f 46/105/3 45/106/3 40/107/3 36/108/3 +f 48/109/4 35/110/4 39/111/4 47/112/4 +f 47/113/5 39/114/5 40/107/5 45/106/5 +f 44/115/2 46/116/2 34/117/2 43/118/2 +f 45/119/5 42/120/5 41/121/5 38/122/5 +f 34/123/1 38/122/1 41/121/1 43/124/1 +f 46/125/6 44/126/6 42/127/6 45/128/6 +f 35/129/2 48/130/2 46/131/2 36/132/2 +f 33/133/4 48/134/4 47/135/4 37/136/4 +f 44/137/3 43/138/3 41/139/3 42/140/3 +f 37/141/5 47/142/5 45/143/5 38/144/5 +o busbar_isolators.001_busbar_isolators +v 0.562500 0.062500 0.562500 +v 0.531250 0.125000 0.531250 +v 0.562500 0.062500 0.437500 +v 0.531250 0.125000 0.468750 +v 0.437500 0.062500 0.437500 +v 0.468750 0.125000 0.468750 +v 0.468750 0.125000 0.531250 +v 0.437500 0.062500 0.562500 +v 0.531250 0.187500 0.468750 +v 0.562500 0.000000 0.437500 +v 0.531250 0.187500 0.531250 +v 0.562500 0.000000 0.562500 +v 0.468750 0.187500 0.468750 +v 0.437500 0.000000 0.437500 +v 0.468750 0.187500 0.531250 +v 0.437500 0.000000 0.562500 +v 0.125000 0.000000 0.562500 +v 0.156250 0.187500 0.531250 +v 0.125000 0.000000 0.437500 +v 0.156250 0.187500 0.468750 +v 0.250000 0.000000 0.562500 +v 0.218750 0.187500 0.531250 +v 0.250000 0.000000 0.437500 +v 0.218750 0.187500 0.468750 +v 0.125000 0.062500 0.562500 +v 0.156250 0.125000 0.531250 +v 0.156250 0.125000 0.468750 +v 0.125000 0.062500 0.437500 +v 0.218750 0.125000 0.468750 +v 0.250000 0.062500 0.437500 +v 0.218750 0.125000 0.531250 +v 0.250000 0.062500 0.562500 +v 0.875000 0.062500 0.562500 +v 0.843750 0.125000 0.531250 +v 0.875000 0.062500 0.437500 +v 0.843750 0.125000 0.468750 +v 0.750000 0.062500 0.437500 +v 0.781250 0.125000 0.468750 +v 0.781250 0.125000 0.531250 +v 0.750000 0.062500 0.562500 +v 0.843750 0.187500 0.468750 +v 0.875000 0.000000 0.437500 +v 0.843750 0.187500 0.531250 +v 0.875000 0.000000 0.562500 +v 0.781250 0.187500 0.468750 +v 0.750000 0.000000 0.437500 +v 0.781250 0.187500 0.531250 +v 0.750000 0.000000 0.562500 +vt 0.125000 0.062500 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.000000 0.062500 +vt 0.125000 0.062500 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.000000 0.062500 +vt 0.125000 0.000000 +vt 0.000000 0.000000 +vt 0.125000 0.000000 +vt 0.000000 0.000000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.312500 +vt 0.000000 0.312500 +vt 0.000000 0.187500 +vt 0.125000 0.187500 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.312500 +vt 0.000000 0.312500 +vt 0.000000 0.187500 +vt 0.125000 0.187500 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.062500 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.000000 0.062500 +vt 0.125000 0.062500 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.000000 0.062500 +vt 0.125000 0.000000 +vt 0.000000 0.000000 +vt 0.125000 0.000000 +vt 0.000000 0.000000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.312500 +vt 0.000000 0.312500 +vt 0.000000 0.187500 +vt 0.125000 0.187500 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vn 0.8944 0.4472 0.0000 +vn 0.0000 0.4472 0.8944 +vn 0.0000 0.0000 1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.4472 -0.8944 +vn -0.8944 0.4472 0.0000 +usemtl None +s off +f 51/145/7 52/146/7 50/147/7 49/148/7 +f 49/149/8 50/150/8 55/151/8 56/152/8 +f 60/153/9 49/149/9 56/152/9 64/154/9 +f 58/155/10 51/145/10 49/148/10 60/156/10 +f 62/157/11 53/158/11 51/159/11 58/160/11 +f 50/161/9 59/162/9 63/163/9 55/164/9 +f 54/165/11 61/166/11 57/167/11 52/168/11 +f 55/169/12 63/170/12 61/171/12 54/172/12 +f 52/173/10 57/174/10 59/175/10 50/176/10 +f 62/177/13 58/178/13 60/179/13 64/180/13 +f 74/181/12 66/182/12 68/183/12 75/184/12 +f 75/185/11 68/186/11 72/187/11 77/188/11 +f 77/189/10 72/190/10 70/191/10 79/192/10 +f 79/193/9 70/194/9 66/195/9 74/196/9 +f 67/197/13 71/198/13 69/199/13 65/200/13 +f 69/201/9 80/202/9 73/203/9 65/204/9 +f 80/202/8 79/205/8 74/206/8 73/203/8 +f 71/207/10 78/208/10 80/209/10 69/210/10 +f 78/208/7 77/211/7 79/212/7 80/209/7 +f 67/213/11 76/214/11 78/215/11 71/216/11 +f 76/214/14 75/217/14 77/218/14 78/215/14 +f 65/219/12 73/220/12 76/221/12 67/222/12 +f 73/220/15 74/223/15 75/224/15 76/221/15 +f 53/158/14 54/225/14 52/226/14 51/159/14 +f 64/227/12 56/228/12 53/229/12 62/230/12 +f 56/228/15 55/231/15 54/232/15 53/229/15 +f 83/233/7 84/234/7 82/235/7 81/236/7 +f 81/237/8 82/238/8 87/239/8 88/240/8 +f 92/241/9 81/237/9 88/240/9 96/242/9 +f 90/243/10 83/233/10 81/236/10 92/244/10 +f 94/245/11 85/246/11 83/247/11 90/248/11 +f 82/249/9 91/250/9 95/251/9 87/252/9 +f 86/253/11 93/254/11 89/255/11 84/256/11 +f 87/257/12 95/258/12 93/259/12 86/260/12 +f 84/261/10 89/262/10 91/263/10 82/264/10 +f 94/265/13 90/266/13 92/267/13 96/268/13 +f 85/246/14 86/269/14 84/270/14 83/247/14 +f 96/271/12 88/272/12 85/273/12 94/274/12 +f 88/272/15 87/275/15 86/276/15 85/273/15 +o busbar_isolators.002_busbar_isolators +v 0.562500 0.562500 0.937500 +v 0.531250 0.531250 0.875000 +v 0.562500 0.437500 0.937500 +v 0.531250 0.468750 0.875000 +v 0.437500 0.437500 0.937500 +v 0.468750 0.468750 0.875000 +v 0.468750 0.531250 0.875000 +v 0.437500 0.562500 0.937500 +v 0.531250 0.468750 0.812500 +v 0.562500 0.437500 1.000000 +v 0.531250 0.531250 0.812500 +v 0.562500 0.562500 1.000000 +v 0.468750 0.468750 0.812500 +v 0.437500 0.437500 1.000000 +v 0.468750 0.531250 0.812500 +v 0.437500 0.562500 1.000000 +v 0.125000 0.562500 1.000000 +v 0.156250 0.531250 0.812500 +v 0.125000 0.437500 1.000000 +v 0.156250 0.468750 0.812500 +v 0.250000 0.562500 1.000000 +v 0.218750 0.531250 0.812500 +v 0.250000 0.437500 1.000000 +v 0.218750 0.468750 0.812500 +v 0.125000 0.562500 0.937500 +v 0.156250 0.531250 0.875000 +v 0.156250 0.468750 0.875000 +v 0.125000 0.437500 0.937500 +v 0.218750 0.468750 0.875000 +v 0.250000 0.437500 0.937500 +v 0.218750 0.531250 0.875000 +v 0.250000 0.562500 0.937500 +v 0.875000 0.562500 0.937500 +v 0.843750 0.531250 0.875000 +v 0.875000 0.437500 0.937500 +v 0.843750 0.468750 0.875000 +v 0.750000 0.437500 0.937500 +v 0.781250 0.468750 0.875000 +v 0.781250 0.531250 0.875000 +v 0.750000 0.562500 0.937500 +v 0.843750 0.468750 0.812500 +v 0.875000 0.437500 1.000000 +v 0.843750 0.531250 0.812500 +v 0.875000 0.562500 1.000000 +v 0.781250 0.468750 0.812500 +v 0.750000 0.437500 1.000000 +v 0.781250 0.531250 0.812500 +v 0.750000 0.562500 1.000000 +vt 0.125000 0.062500 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.000000 0.062500 +vt 0.125000 0.062500 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.000000 0.062500 +vt 0.125000 0.000000 +vt 0.000000 0.000000 +vt 0.125000 0.000000 +vt 0.000000 0.000000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.312500 +vt 0.000000 0.312500 +vt 0.000000 0.187500 +vt 0.125000 0.187500 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.312500 +vt 0.000000 0.312500 +vt 0.000000 0.187500 +vt 0.125000 0.187500 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.062500 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.000000 0.062500 +vt 0.125000 0.062500 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.000000 0.062500 +vt 0.125000 0.000000 +vt 0.000000 0.000000 +vt 0.125000 0.000000 +vt 0.000000 0.000000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.125000 +vt 0.125000 0.187500 +vt 0.000000 0.187500 +vt 0.000000 0.125000 +vt 0.125000 0.312500 +vt 0.000000 0.312500 +vt 0.000000 0.187500 +vt 0.125000 0.187500 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vt 0.125000 0.000000 +vt 0.125000 0.062500 +vt 0.000000 0.062500 +vt 0.000000 0.000000 +vt 0.093750 0.125000 +vt 0.031250 0.125000 +vn 0.8944 0.0000 -0.4472 +vn 0.0000 0.8944 -0.4472 +vn 0.0000 1.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 -0.8944 -0.4472 +vn -0.8944 0.0000 -0.4472 +usemtl None +s off +f 99/277/16 100/278/16 98/279/16 97/280/16 +f 97/281/17 98/282/17 103/283/17 104/284/17 +f 108/285/18 97/281/18 104/284/18 112/286/18 +f 106/287/19 99/277/19 97/280/19 108/288/19 +f 110/289/20 101/290/20 99/291/20 106/292/20 +f 98/293/18 107/294/18 111/295/18 103/296/18 +f 102/297/20 109/298/20 105/299/20 100/300/20 +f 103/301/21 111/302/21 109/303/21 102/304/21 +f 100/305/19 105/306/19 107/307/19 98/308/19 +f 110/309/22 106/310/22 108/311/22 112/312/22 +f 122/313/21 114/314/21 116/315/21 123/316/21 +f 123/317/20 116/318/20 120/319/20 125/320/20 +f 125/321/19 120/322/19 118/323/19 127/324/19 +f 127/325/18 118/326/18 114/327/18 122/328/18 +f 115/329/22 119/330/22 117/331/22 113/332/22 +f 117/333/18 128/334/18 121/335/18 113/336/18 +f 128/334/17 127/337/17 122/338/17 121/335/17 +f 119/339/19 126/340/19 128/341/19 117/342/19 +f 126/340/16 125/343/16 127/344/16 128/341/16 +f 115/345/20 124/346/20 126/347/20 119/348/20 +f 124/346/23 123/349/23 125/350/23 126/347/23 +f 113/351/21 121/352/21 124/353/21 115/354/21 +f 121/352/24 122/355/24 123/356/24 124/353/24 +f 101/290/23 102/357/23 100/358/23 99/291/23 +f 112/359/21 104/360/21 101/361/21 110/362/21 +f 104/360/24 103/363/24 102/364/24 101/361/24 +f 131/365/16 132/366/16 130/367/16 129/368/16 +f 129/369/17 130/370/17 135/371/17 136/372/17 +f 140/373/18 129/369/18 136/372/18 144/374/18 +f 138/375/19 131/365/19 129/368/19 140/376/19 +f 142/377/20 133/378/20 131/379/20 138/380/20 +f 130/381/18 139/382/18 143/383/18 135/384/18 +f 134/385/20 141/386/20 137/387/20 132/388/20 +f 135/389/21 143/390/21 141/391/21 134/392/21 +f 132/393/19 137/394/19 139/395/19 130/396/19 +f 142/397/22 138/398/22 140/399/22 144/400/22 +f 133/378/23 134/401/23 132/402/23 131/379/23 +f 144/403/21 136/404/21 133/405/21 142/406/21 +f 136/404/24 135/407/24 134/408/24 133/405/24 diff --git a/src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_edge_outside.obj b/src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_edge_outside.obj new file mode 100644 index 0000000..6ed2247 --- /dev/null +++ b/src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_edge_outside.obj @@ -0,0 +1,207 @@ +# Blender v2.79 (sub 0) OBJ File: 'busbar.blend' +# www.blender.org +mtllib busmaterial.mtl +o busbar_edge_outside +v 0.437500 0.187500 1.000000 +v 0.437500 0.250000 1.000000 +v 0.125000 0.187500 0.812500 +v 0.437500 0.250000 0.750000 +v 0.562500 0.187500 1.000000 +v 0.562500 0.250000 1.000000 +v 0.562500 0.187500 0.750000 +v 0.250000 0.250000 0.812500 +v 0.562500 0.250000 0.812500 +v 0.437500 0.187500 0.812500 +v 0.562500 0.250000 0.750000 +v 0.250000 0.187500 0.750000 +v 0.250000 0.250000 1.000000 +v 0.437500 0.187500 0.750000 +v 0.250000 0.187500 1.000000 +v 0.437500 0.250000 0.812500 +v 0.125000 0.250000 0.750000 +v 0.125000 0.250000 1.000000 +v 0.562500 0.187500 0.812500 +v 0.125000 0.187500 1.000000 +v 0.250000 0.250000 0.750000 +v 0.125000 0.187500 0.750000 +v 0.125000 0.250000 0.812500 +v 0.250000 0.187500 0.812500 +v 0.250000 0.000000 0.812500 +v 0.125000 0.000000 0.750000 +v 0.250000 0.000000 0.750000 +v 0.750000 0.187500 0.812500 +v 0.875000 0.250000 0.812500 +v 0.875000 0.187500 0.750000 +v 0.875000 0.250000 1.000000 +v 0.875000 0.187500 1.000000 +v 0.750000 0.250000 0.750000 +v 0.750000 0.250000 1.000000 +v 0.750000 0.187500 1.000000 +v 0.875000 0.250000 0.750000 +v 0.750000 0.187500 0.750000 +v 0.750000 0.250000 0.812500 +v 0.875000 0.187500 0.812500 +v 0.750000 0.000000 0.750000 +v 0.437500 0.000000 0.812500 +v 0.437500 0.000000 0.750000 +v 0.562500 0.000000 0.812500 +v 0.562500 0.000000 0.750000 +v 0.125000 0.000000 0.812500 +v 0.750000 0.000000 0.812500 +v 0.875000 0.000000 0.812500 +v 0.875000 0.000000 0.750000 +vt 0.187500 0.812500 +vt 0.250000 0.812500 +vt 0.250000 0.875000 +vt 0.187500 0.875000 +vt 0.000000 0.812500 +vt 0.000000 0.875000 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.312500 0.875000 +vt 0.312500 0.812500 +vt 0.000000 0.812500 +vt 0.187500 0.812500 +vt 0.187500 0.875000 +vt 0.000000 0.875000 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.312500 0.875000 +vt 0.312500 0.812500 +vt 0.250000 0.812500 +vt 0.250000 0.875000 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vt 0.187500 0.875000 +vt 0.187500 1.000000 +vt 0.000000 1.000000 +vt 0.187500 1.000000 +vt 0.250000 1.000000 +vt 0.812500 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.812500 0.875000 +vt 0.750000 0.812500 +vt 0.750000 0.875000 +vt 0.750000 0.875000 +vt 0.562500 0.875000 +vt 0.562500 0.812500 +vt 0.750000 0.812500 +vt 0.250000 0.875000 +vt 0.437500 0.875000 +vt 0.437500 1.000000 +vt 0.250000 1.000000 +vt 0.250000 0.812500 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.250000 0.875000 +vt 0.437500 1.000000 +vt 0.250000 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vt 0.187500 0.875000 +vt 0.187500 1.000000 +vt 0.000000 1.000000 +vt 0.187500 1.000000 +vt 0.250000 1.000000 +vt 0.812500 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.812500 0.875000 +vt 0.750000 0.812500 +vt 0.750000 0.875000 +vt 0.750000 0.875000 +vt 0.562500 0.875000 +vt 0.562500 0.812500 +vt 0.750000 0.812500 +vt 0.250000 0.875000 +vt 0.437500 0.875000 +vt 0.437500 1.000000 +vt 0.250000 1.000000 +vt 0.250000 0.812500 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.250000 0.875000 +vt 0.437500 1.000000 +vt 0.250000 1.000000 +vt 0.187500 0.812500 +vt 0.250000 0.812500 +vt 0.250000 0.875000 +vt 0.187500 0.875000 +vt 0.000000 0.812500 +vt 0.000000 0.875000 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.312500 0.875000 +vt 0.312500 0.812500 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vt 0.187500 0.875000 +vt 0.187500 1.000000 +vt 0.000000 1.000000 +vt 0.187500 1.000000 +vt 0.250000 1.000000 +vt 0.812500 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.812500 0.875000 +vt 0.750000 0.812500 +vt 0.750000 0.875000 +vt 0.750000 0.875000 +vt 0.562500 0.875000 +vt 0.562500 0.812500 +vt 0.750000 0.812500 +vt 0.250000 0.875000 +vt 0.437500 0.875000 +vt 0.437500 1.000000 +vt 0.250000 1.000000 +vt 0.250000 0.812500 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.250000 0.875000 +vt 0.437500 1.000000 +vt 0.250000 1.000000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +usemtl None +s off +f 24/1/1 12/2/1 21/3/1 8/4/1 +f 15/5/1 24/1/1 8/4/1 13/6/1 +f 22/7/2 17/8/2 21/9/2 12/10/2 +f 5/11/1 19/12/1 9/13/1 6/14/1 +f 14/15/2 4/16/2 11/17/2 7/18/2 +f 19/12/1 7/19/1 11/20/1 9/13/1 +f 5/21/3 1/22/3 10/23/3 19/24/3 +f 2/25/4 6/14/4 9/13/4 16/26/4 +f 11/20/4 4/27/4 16/26/4 9/13/4 +f 10/28/5 1/29/5 2/30/5 16/31/5 +f 14/32/5 10/28/5 16/31/5 4/33/5 +f 14/34/5 42/35/5 41/36/5 10/37/5 +f 10/38/6 41/39/6 43/40/6 19/41/6 +f 19/42/1 43/43/1 44/44/1 7/45/1 +f 42/46/2 14/47/2 7/45/2 44/44/2 +f 15/48/3 20/49/3 3/50/3 24/51/3 +f 18/52/4 13/6/4 8/4/4 23/53/4 +f 21/3/4 17/54/4 23/53/4 8/4/4 +f 3/55/5 20/56/5 18/57/5 23/58/5 +f 22/59/5 3/55/5 23/58/5 17/60/5 +f 22/61/5 26/62/5 45/63/5 3/64/5 +f 3/65/6 45/66/6 25/67/6 24/68/6 +f 24/69/1 25/70/1 27/71/1 12/72/1 +f 26/73/2 22/74/2 12/72/2 27/71/2 +f 39/75/1 30/76/1 36/77/1 29/78/1 +f 32/79/1 39/75/1 29/78/1 31/80/1 +f 37/81/2 33/82/2 36/83/2 30/84/2 +f 32/85/3 35/86/3 28/87/3 39/88/3 +f 34/89/4 31/80/4 29/78/4 38/90/4 +f 36/77/4 33/91/4 38/90/4 29/78/4 +f 28/92/5 35/93/5 34/94/5 38/95/5 +f 37/96/5 28/92/5 38/95/5 33/97/5 +f 37/98/5 40/99/5 46/100/5 28/101/5 +f 28/102/6 46/103/6 47/104/6 39/105/6 +f 39/106/1 47/107/1 48/108/1 30/109/1 +f 40/110/2 37/111/2 30/109/2 48/108/2 diff --git a/src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_lv_a.obj b/src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_lv_a.obj new file mode 100644 index 0000000..f83c913 --- /dev/null +++ b/src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_lv_a.obj @@ -0,0 +1,60 @@ +# Blender v2.79 (sub 0) OBJ File: 'busbar.blend' +# www.blender.org +mtllib busmaterial.mtl +o busconnector_lv_a +v 0.125000 0.281250 0.562500 +v 0.125000 0.343750 0.562500 +v -0.312500 0.281250 0.562500 +v -0.312500 0.343750 0.562500 +v 0.125000 0.281250 0.437500 +v 0.125000 0.343750 0.437500 +v -0.312500 0.281250 0.437500 +v -0.312500 0.343750 0.437500 +v 0.156250 0.250000 0.562500 +v 0.218750 0.250000 0.562500 +v 0.218750 0.250000 0.437500 +v 0.156250 0.250000 0.437500 +vt 1.000000 0.875000 +vt 1.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vt 0.437500 0.875000 +vt 0.437500 1.000000 +vt 0.000000 0.812500 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.000000 0.875000 +vt 0.437500 1.000000 +vt 0.000000 1.000000 +vt 0.125000 0.875000 +vt 0.125000 1.000000 +vt 0.250000 1.000000 +vt 0.250000 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 0.062500 0.875000 +vt 0.062500 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vn -0.0000 0.0000 1.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 1.0000 0.0000 +vn 0.7071 0.7071 0.0000 +vn -0.7071 -0.7071 0.0000 +usemtl None +s off +f 2/1/1 1/2/1 9/3/1 10/4/1 +f 5/5/2 1/6/2 3/7/2 7/8/2 +f 3/9/1 1/10/1 2/11/1 4/12/1 +f 5/13/3 7/14/3 8/15/3 6/16/3 +f 8/15/4 4/17/4 2/18/4 6/16/4 +f 6/19/5 2/20/5 10/21/5 11/22/5 +f 5/13/3 6/16/3 11/23/3 12/24/3 +f 1/25/6 5/26/6 12/27/6 9/28/6 diff --git a/src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_lv_b.obj b/src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_lv_b.obj new file mode 100644 index 0000000..00165d7 --- /dev/null +++ b/src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_lv_b.obj @@ -0,0 +1,60 @@ +# Blender v2.79 (sub 0) OBJ File: 'busbar.blend' +# www.blender.org +mtllib busmaterial.mtl +o busconnector_lv_b +v 0.437500 0.281250 0.562500 +v 0.437500 0.343750 0.562500 +v -0.312500 0.281250 0.562500 +v -0.312500 0.343750 0.562500 +v 0.437500 0.281250 0.437500 +v 0.437500 0.343750 0.437500 +v -0.312500 0.281250 0.437500 +v -0.312500 0.343750 0.437500 +v 0.468750 0.250000 0.562500 +v 0.531250 0.250000 0.562500 +v 0.531250 0.250000 0.437500 +v 0.468750 0.250000 0.437500 +vt 1.000000 0.875000 +vt 1.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vt 0.750000 0.875000 +vt 0.750000 1.000000 +vt 0.000000 0.812500 +vt 0.750000 0.812500 +vt 0.750000 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 0.750000 0.812500 +vt 0.750000 0.875000 +vt 0.000000 0.875000 +vt 0.750000 1.000000 +vt 0.000000 1.000000 +vt 0.125000 0.875000 +vt 0.125000 1.000000 +vt 0.250000 1.000000 +vt 0.250000 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 0.062500 0.875000 +vt 0.062500 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vn -0.0000 0.0000 1.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 1.0000 0.0000 +vn 0.7071 0.7071 0.0000 +vn -0.7071 -0.7071 0.0000 +usemtl None +s off +f 2/1/1 1/2/1 9/3/1 10/4/1 +f 5/5/2 1/6/2 3/7/2 7/8/2 +f 3/9/1 1/10/1 2/11/1 4/12/1 +f 5/13/3 7/14/3 8/15/3 6/16/3 +f 8/15/4 4/17/4 2/18/4 6/16/4 +f 6/19/5 2/20/5 10/21/5 11/22/5 +f 5/13/3 6/16/3 11/23/3 12/24/3 +f 1/25/6 5/26/6 12/27/6 9/28/6 diff --git a/src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_lv_c.obj b/src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_lv_c.obj new file mode 100644 index 0000000..87d52dc --- /dev/null +++ b/src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_lv_c.obj @@ -0,0 +1,82 @@ +# Blender v2.79 (sub 0) OBJ File: 'busbar.blend' +# www.blender.org +mtllib busmaterial.mtl +o busconnector_lv_c +v 0.750000 0.281250 0.562500 +v 0.750000 0.343750 0.562500 +v -0.312500 0.281250 0.562500 +v -0.312500 0.343750 0.562500 +v 0.750000 0.281250 0.437500 +v 0.750000 0.343750 0.437500 +v -0.312500 0.281250 0.437500 +v -0.312500 0.343750 0.437500 +v 0.781250 0.250000 0.562500 +v 0.843750 0.250000 0.562500 +v 0.843750 0.250000 0.437500 +v 0.781250 0.250000 0.437500 +v 0.187500 0.281250 0.562500 +v 0.187500 0.343750 0.562500 +v 0.187500 0.281250 0.437500 +v 0.187500 0.343750 0.437500 +vt 1.000000 0.875000 +vt 1.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.437500 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.437500 1.000000 +vt 0.125000 0.875000 +vt 0.125000 1.000000 +vt 0.250000 1.000000 +vt 0.250000 0.875000 +vt 0.000000 0.812500 +vt 0.000000 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 0.062500 0.875000 +vt 0.062500 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vt 0.437500 0.812500 +vt 1.000000 0.812500 +vt 0.000000 0.812500 +vt 0.562500 0.812500 +vt 0.562500 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 0.562500 0.812500 +vt 0.562500 0.875000 +vt 0.000000 0.875000 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.437500 1.000000 +vt 0.437500 0.875000 +vt 0.562500 0.875000 +vt 0.562500 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vt 0.000000 1.000000 +vt 0.562500 1.000000 +vn -0.0000 0.0000 1.0000 +vn 0.0000 1.0000 0.0000 +vn 0.7071 0.7071 0.0000 +vn 0.0000 0.0000 -1.0000 +vn -0.7071 -0.7071 0.0000 +vn 0.0000 -1.0000 0.0000 +usemtl None +s off +f 2/1/1 1/2/1 9/3/1 10/4/1 +f 6/5/2 16/6/2 14/7/2 2/8/2 +f 6/9/3 2/10/3 10/11/3 11/12/3 +f 5/13/4 6/14/4 11/15/4 12/16/4 +f 1/17/5 5/18/5 12/19/5 9/20/5 +f 5/21/4 15/22/4 16/6/4 6/5/4 +f 15/23/4 7/24/4 8/25/4 16/26/4 +f 3/27/1 13/28/1 14/29/1 4/30/1 +f 13/31/1 1/2/1 2/1/1 14/32/1 +f 13/33/6 15/34/6 5/35/6 1/36/6 +f 3/37/6 7/38/6 15/39/6 13/40/6 +f 14/41/2 16/26/2 8/25/2 4/42/2 diff --git a/src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_mv_a.obj b/src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_mv_a.obj new file mode 100644 index 0000000..606e94b --- /dev/null +++ b/src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_mv_a.obj @@ -0,0 +1,84 @@ +# Blender v2.79 (sub 0) OBJ File: 'busbar.blend' +# www.blender.org +mtllib busmaterial.mtl +o busconnector_mv_a +v 0.125000 0.343750 0.562500 +v 0.125000 0.406250 0.562500 +v -0.312500 0.343750 0.562500 +v -0.312500 0.406250 0.562500 +v 0.125000 0.343750 0.437500 +v 0.125000 0.406250 0.437500 +v -0.312500 0.343750 0.437500 +v -0.312500 0.406250 0.437500 +v 0.156250 0.312500 0.562500 +v 0.218750 0.312500 0.562500 +v 0.218750 0.312500 0.437500 +v 0.156250 0.312500 0.437500 +v 0.156250 0.250000 0.562500 +v 0.218750 0.250000 0.562500 +v 0.218750 0.250000 0.437500 +v 0.156250 0.250000 0.437500 +vt 1.000000 0.875000 +vt 1.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vt 0.437500 0.875000 +vt 0.437500 1.000000 +vt 0.000000 0.812500 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 0.000000 0.875000 +vt 0.437500 1.000000 +vt 0.000000 1.000000 +vt 0.062500 0.812500 +vt 0.062500 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 0.125000 0.875000 +vt 0.125000 1.000000 +vt 0.250000 1.000000 +vt 0.250000 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 0.062500 0.875000 +vt 0.062500 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vt 0.125000 0.875000 +vt 0.125000 1.000000 +vt 0.062500 1.000000 +vt 0.062500 0.875000 +vt 0.937500 0.812500 +vt 0.937500 0.875000 +vt 0.187500 0.875000 +vt 0.187500 1.000000 +vt 0.125000 1.000000 +vt 0.125000 0.875000 +vn -0.0000 0.0000 1.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 1.0000 0.0000 +vn 0.7071 0.7071 0.0000 +vn -0.7071 -0.7071 0.0000 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +usemtl None +s off +f 2/1/1 1/2/1 9/3/1 10/4/1 +f 5/5/2 1/6/2 3/7/2 7/8/2 +f 3/9/1 1/10/1 2/11/1 4/12/1 +f 5/13/3 7/14/3 8/15/3 6/16/3 +f 8/15/4 4/17/4 2/18/4 6/16/4 +f 12/19/3 11/20/3 15/21/3 16/22/3 +f 6/23/5 2/24/5 10/25/5 11/26/5 +f 5/13/3 6/16/3 11/27/3 12/28/3 +f 1/29/6 5/30/6 12/31/6 9/32/6 +f 9/33/7 12/34/7 16/35/7 13/36/7 +f 10/4/1 9/3/1 13/37/1 14/38/1 +f 11/39/8 10/40/8 14/41/8 15/42/8 diff --git a/src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_mv_b.obj b/src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_mv_b.obj new file mode 100644 index 0000000..fd7a08d --- /dev/null +++ b/src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_mv_b.obj @@ -0,0 +1,84 @@ +# Blender v2.79 (sub 0) OBJ File: 'busbar.blend' +# www.blender.org +mtllib busmaterial.mtl +o busconnector_mv_b +v 0.437500 0.343750 0.562500 +v 0.437500 0.406250 0.562500 +v -0.312500 0.343750 0.562500 +v -0.312500 0.406250 0.562500 +v 0.437500 0.343750 0.437500 +v 0.437500 0.406250 0.437500 +v -0.312500 0.343750 0.437500 +v -0.312500 0.406250 0.437500 +v 0.468750 0.312500 0.562500 +v 0.531250 0.312500 0.562500 +v 0.531250 0.312500 0.437500 +v 0.468750 0.312500 0.437500 +v 0.468750 0.250000 0.562500 +v 0.531250 0.250000 0.562500 +v 0.531250 0.250000 0.437500 +v 0.468750 0.250000 0.437500 +vt 1.000000 0.875000 +vt 1.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vt 0.750000 0.875000 +vt 0.750000 1.000000 +vt 0.000000 0.812500 +vt 0.750000 0.812500 +vt 0.750000 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 0.750000 0.812500 +vt 0.750000 0.875000 +vt 0.000000 0.875000 +vt 0.750000 1.000000 +vt 0.000000 1.000000 +vt 0.062500 0.812500 +vt 0.062500 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 0.125000 0.875000 +vt 0.125000 1.000000 +vt 0.250000 1.000000 +vt 0.250000 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 0.062500 0.875000 +vt 0.062500 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vt 0.125000 0.875000 +vt 0.125000 1.000000 +vt 0.062500 1.000000 +vt 0.062500 0.875000 +vt 0.937500 0.812500 +vt 0.937500 0.875000 +vt 0.187500 0.875000 +vt 0.187500 1.000000 +vt 0.125000 1.000000 +vt 0.125000 0.875000 +vn -0.0000 0.0000 1.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 1.0000 0.0000 +vn 0.7071 0.7071 0.0000 +vn -0.7071 -0.7071 0.0000 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +usemtl None +s off +f 2/1/1 1/2/1 9/3/1 10/4/1 +f 5/5/2 1/6/2 3/7/2 7/8/2 +f 3/9/1 1/10/1 2/11/1 4/12/1 +f 5/13/3 7/14/3 8/15/3 6/16/3 +f 8/15/4 4/17/4 2/18/4 6/16/4 +f 12/19/3 11/20/3 15/21/3 16/22/3 +f 6/23/5 2/24/5 10/25/5 11/26/5 +f 5/13/3 6/16/3 11/27/3 12/28/3 +f 1/29/6 5/30/6 12/31/6 9/32/6 +f 9/33/7 12/34/7 16/35/7 13/36/7 +f 10/4/1 9/3/1 13/37/1 14/38/1 +f 11/39/8 10/40/8 14/41/8 15/42/8 diff --git a/src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_mv_c.obj b/src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_mv_c.obj new file mode 100644 index 0000000..51e90b1 --- /dev/null +++ b/src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_mv_c.obj @@ -0,0 +1,106 @@ +# Blender v2.79 (sub 0) OBJ File: 'busbar.blend' +# www.blender.org +mtllib busmaterial.mtl +o busconnector_mv_c +v 0.750000 0.343750 0.562500 +v 0.750000 0.406250 0.562500 +v -0.312500 0.343750 0.562500 +v -0.312500 0.406250 0.562500 +v 0.750000 0.343750 0.437500 +v 0.750000 0.406250 0.437500 +v -0.312500 0.343750 0.437500 +v -0.312500 0.406250 0.437500 +v 0.781250 0.312500 0.562500 +v 0.843750 0.312500 0.562500 +v 0.843750 0.312500 0.437500 +v 0.781250 0.312500 0.437500 +v 0.781250 0.250000 0.562500 +v 0.843750 0.250000 0.562500 +v 0.843750 0.250000 0.437500 +v 0.781250 0.250000 0.437500 +v 0.187500 0.343750 0.562500 +v 0.187500 0.406250 0.562500 +v 0.187500 0.343750 0.437500 +v 0.187500 0.406250 0.437500 +vt 1.000000 0.875000 +vt 1.000000 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.875000 +vt 0.437500 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.437500 1.000000 +vt 0.062500 0.812500 +vt 0.062500 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 0.125000 0.875000 +vt 0.125000 1.000000 +vt 0.250000 1.000000 +vt 0.250000 0.875000 +vt 0.000000 0.812500 +vt 0.000000 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 0.062500 0.875000 +vt 0.062500 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vt 0.125000 0.875000 +vt 0.125000 1.000000 +vt 0.062500 1.000000 +vt 0.062500 0.875000 +vt 0.937500 0.812500 +vt 0.937500 0.875000 +vt 0.187500 0.875000 +vt 0.187500 1.000000 +vt 0.125000 1.000000 +vt 0.125000 0.875000 +vt 0.437500 0.812500 +vt 1.000000 0.812500 +vt 0.000000 0.812500 +vt 0.562500 0.812500 +vt 0.562500 0.875000 +vt 0.000000 0.875000 +vt 0.000000 0.812500 +vt 0.562500 0.812500 +vt 0.562500 0.875000 +vt 0.000000 0.875000 +vt 0.437500 0.812500 +vt 0.437500 0.875000 +vt 1.000000 0.875000 +vt 1.000000 1.000000 +vt 0.437500 1.000000 +vt 0.437500 0.875000 +vt 0.562500 0.875000 +vt 0.562500 1.000000 +vt 0.000000 1.000000 +vt 0.000000 0.875000 +vt 0.000000 1.000000 +vt 0.562500 1.000000 +vn -0.0000 0.0000 1.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.7071 0.7071 0.0000 +vn -0.7071 -0.7071 0.0000 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +usemtl None +s off +f 2/1/1 1/2/1 9/3/1 10/4/1 +f 6/5/2 20/6/2 18/7/2 2/8/2 +f 12/9/3 11/10/3 15/11/3 16/12/3 +f 6/13/4 2/14/4 10/15/4 11/16/4 +f 5/17/3 6/18/3 11/19/3 12/20/3 +f 1/21/5 5/22/5 12/23/5 9/24/5 +f 9/25/6 12/26/6 16/27/6 13/28/6 +f 10/4/1 9/3/1 13/29/1 14/30/1 +f 11/31/7 10/32/7 14/33/7 15/34/7 +f 5/35/3 19/36/3 20/6/3 6/5/3 +f 19/37/3 7/38/3 8/39/3 20/40/3 +f 3/41/1 17/42/1 18/43/1 4/44/1 +f 17/45/1 1/2/1 2/1/1 18/46/1 +f 17/47/8 19/48/8 5/49/8 1/50/8 +f 3/51/8 7/52/8 19/53/8 17/54/8 +f 18/55/2 20/40/2 8/39/2 4/56/2 diff --git a/src/main/resources/assets/overengineered/models/block/obj/busbar/busmaterial.mtl b/src/main/resources/assets/overengineered/models/block/obj/busbar/busmaterial.mtl new file mode 100644 index 0000000..ae6136b --- /dev/null +++ b/src/main/resources/assets/overengineered/models/block/obj/busbar/busmaterial.mtl @@ -0,0 +1,2 @@ +newmtl None +map_Kd #texture diff --git a/src/main/resources/assets/overengineered/textures/block/obj/busbar.png b/src/main/resources/assets/overengineered/textures/block/obj/busbar.png new file mode 100644 index 0000000000000000000000000000000000000000..a560112839ce9ac2afd7d0c260f7075bea5b3bdf GIT binary patch literal 266 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBufiR<}hF1enaK5LDV~BQ2$Qoorh1 z-x7i>4nfbG)X_iFt(a!I3mrV{zG(Wa5ai3d!ZHDD@nXJDN5yG?9 zY~@hQNV;vNJ1r<={p(d~hvx2$?dDh_ZlSt#3GbXEO2waTvW@*+cg=kByUwk?Zr=09 zanrZ?{WL8SWM2QikY{IAcXai>#U5+fo|@J$d*tn3$Md_<-2cDvR#o{qn}AMb@O1Ta JS?83{1ONiEV%z`# literal 0 HcmV?d00001 From 8848ff67965ab0c25c460f60ef7c93b61414df32 Mon Sep 17 00:00:00 2001 From: TwistedGate <31029668+TwistedGate@users.noreply.github.com> Date: Mon, 22 Aug 2022 17:14:03 +0200 Subject: [PATCH 11/26] Mild Cleanup Recursion problem still exists, and i don't know why and how. And it's realy frustrating and demotivating trying to find *something* that maaay be the cause but always ending up not finding it. --- .../common/blocks/busbar/BusbarBlock.java | 62 ++-- .../common/blocks/busbar/BusbarState.java | 331 ++---------------- 2 files changed, 68 insertions(+), 325 deletions(-) diff --git a/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java b/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java index 71204e6..374db3e 100644 --- a/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java +++ b/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java @@ -40,9 +40,7 @@ public class BusbarBlock extends OEBlockBase implements EntityBlock{ public BusbarBlock(){ super(Block.Properties.of(MATERIAL).strength(2.0F, 10.0F).sound(SoundType.METAL).requiresCorrectToolForDrops()); - registerDefaultState(getStateDefinition().any() - .setValue(SHAPE, EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH) - ); + registerDefaultState(getStateDefinition().any().setValue(SHAPE, EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH)); } @Override @@ -55,12 +53,24 @@ public boolean propagatesSkylightDown(BlockState pState, BlockGetter pLevel, Blo return true; } - public static boolean isBusbar(Level level, BlockPos pos){ - return isBusbar(level.getBlockState(pos)); - } - - public static boolean isBusbar(BlockState state){ - return state.getBlock() instanceof BusbarBlock; + @Override + public BlockState getStateForPlacement(BlockPlaceContext pContext){ + Direction direction = pContext.getHorizontalDirection(); + Direction face = pContext.getClickedFace(); + + // @formatter:off + EnumBusbarShape shape = switch(face){ + case DOWN -> (direction == Direction.EAST || direction == Direction.WEST) ? EnumBusbarShape.INSULATORS_UP_EAST_WEST : EnumBusbarShape.INSULATORS_UP_NORTH_SOUTH; + case UP -> (direction == Direction.EAST || direction == Direction.WEST) ? EnumBusbarShape.INSULATORS_DOWN_EAST_WEST : EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH; + case NORTH -> EnumBusbarShape.INSULATORS_SOUTH_UP_DOWN; + case EAST -> EnumBusbarShape.INSULATORS_WEST_UP_DOWN; + case SOUTH -> EnumBusbarShape.INSULATORS_NORTH_UP_DOWN; + case WEST -> EnumBusbarShape.INSULATORS_EAST_UP_DOWN; + default -> EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH; + }; + // @formatter:on + + return defaultBlockState().setValue(SHAPE, shape); } @Override @@ -87,24 +97,6 @@ public InteractionResult use(BlockState pState, Level pLevel, BlockPos pPos, Pla return InteractionResult.PASS; } - @Override - public BlockState getStateForPlacement(BlockPlaceContext pContext){ - Direction direction = pContext.getHorizontalDirection(); - Direction face = pContext.getClickedFace(); - - EnumBusbarShape shape = switch(face){ - case DOWN -> (direction == Direction.EAST || direction == Direction.WEST) ? EnumBusbarShape.INSULATORS_UP_EAST_WEST : EnumBusbarShape.INSULATORS_UP_NORTH_SOUTH; - case UP -> (direction == Direction.EAST || direction == Direction.WEST) ? EnumBusbarShape.INSULATORS_DOWN_EAST_WEST : EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH; - case NORTH -> EnumBusbarShape.INSULATORS_SOUTH_UP_DOWN; - case EAST -> EnumBusbarShape.INSULATORS_WEST_UP_DOWN; - case SOUTH -> EnumBusbarShape.INSULATORS_NORTH_UP_DOWN; - case WEST -> EnumBusbarShape.INSULATORS_EAST_UP_DOWN; - default -> EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH; - }; - - return defaultBlockState().setValue(SHAPE, shape); - } - @Override public void setPlacedBy(Level level, BlockPos pos, BlockState state, LivingEntity placer, ItemStack stack){ } @@ -117,12 +109,12 @@ public void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldS private BlockState updateDir(Level level, BlockPos pos, BlockState state, boolean placing){ if(level.isClientSide){ return state; - }else{ - EnumBusbarShape shape = state.getValue(SHAPE); - return new BusbarState(level, pos, state).place(placing, shape).getState(); } + + EnumBusbarShape shape = state.getValue(SHAPE); + return new BusbarState(level, pos, state).place(placing, shape).getState(); } - + @Override public void neighborChanged(BlockState stateIn, Level levelIn, BlockPos posIn, Block lastBlockIn, BlockPos fromPosIn, boolean isMovingIn){ } @@ -178,4 +170,12 @@ public VoxelShape getShape(BlockState pState, BlockGetter pLevel, BlockPos pPos, } // @formatter:on } + + public static boolean isBusbar(Level level, BlockPos pos){ + return isBusbar(level.getBlockState(pos)); + } + + public static boolean isBusbar(BlockState state){ + return state.getBlock() instanceof BusbarBlock; + } } diff --git a/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarState.java b/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarState.java index bf908b3..aea2d3e 100644 --- a/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarState.java +++ b/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarState.java @@ -7,11 +7,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.BaseRailBlock; -import net.minecraft.world.level.block.RailBlock; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.state.properties.RailShape; -import twistedgate.overengineered.OverEngineered; import twistedgate.overengineered.utils.enums.EnumBusbarShape; public class BusbarState{ @@ -32,45 +28,29 @@ public BusbarState(Level pLevel, BlockPos pPos, BlockState pState){ updateConnections(shape); } - private boolean canConnectTo(BusbarState busState){ - return connectsTo(busState) || this.connections.size() != 2; - } - - private boolean connectsTo(BusbarState busState){ - return hasConnection(busState.pos); - } - @Nullable private BusbarState getBus(BlockPos pos){ BlockState blockState = this.level.getBlockState(pos); - // TODO May need special cases for edges. (Left "original" below) + // TODO May need special cases for edges return BusbarBlock.isBusbar(blockState) ? new BusbarState(this.level, pos, blockState) : null; - - /* - if(BusbarBlock.isBusbar(blockState)){ - return new BusbarState(this.level, pos, blockState); - }else{ - BlockPos other = pos.above(); - blockState = this.level.getBlockState(other); - if(BusbarBlock.isBusbar(blockState)){ - return new BusbarState(this.level, other, blockState); - }else{ - other = pos.below(); - blockState = this.level.getBlockState(other); - return BusbarBlock.isBusbar(blockState) ? new BusbarState(this.level, other, blockState) : null; - } - } - */ } public BlockState getState(){ return this.state; } + private boolean canConnectTo(BusbarState busState){ + return connectsTo(busState) || this.connections.size() != 2; + } + + private boolean connectsTo(BusbarState busState){ + return hasConnection(busState.pos); + } + private boolean hasConnection(BlockPos pos){ for(int i = 0;i < this.connections.size();++i){ BlockPos blockpos = this.connections.get(i); - if(blockpos.getX() == pos.getX() && blockpos.getZ() == pos.getZ()){ + if(blockpos.equals(pos)){ return true; } } @@ -87,20 +67,21 @@ private boolean hasNeighborBus(BlockPos pos){ return busState.canConnectTo(this); } + @SuppressWarnings("unused") public BusbarState place(boolean placing, EnumBusbarShape shapeIn){ - BlockPos posDown = this.pos.below(); - BlockPos posUp = this.pos.above(); - BlockPos posNorth = this.pos.north(); - BlockPos posEast = this.pos.east(); - BlockPos posSouth = this.pos.south(); - BlockPos posWest = this.pos.west(); - - boolean hasDown = hasNeighborBus(posDown); - boolean hasUp = hasNeighborBus(posUp); - boolean hasNorth = hasNeighborBus(posNorth); - boolean hasEast = hasNeighborBus(posEast); - boolean hasSouth = hasNeighborBus(posSouth); - boolean hasWest = hasNeighborBus(posWest); + final BlockPos posDown = this.pos.below(); + final BlockPos posUp = this.pos.above(); + final BlockPos posNorth = this.pos.north(); + final BlockPos posEast = this.pos.east(); + final BlockPos posSouth = this.pos.south(); + final BlockPos posWest = this.pos.west(); + + final boolean hasDown = hasNeighborBus(posDown); + final boolean hasUp = hasNeighborBus(posUp); + final boolean hasNorth = hasNeighborBus(posNorth); + final boolean hasEast = hasNeighborBus(posEast); + final boolean hasSouth = hasNeighborBus(posSouth); + final boolean hasWest = hasNeighborBus(posWest); EnumBusbarShape shape = null; @@ -188,162 +169,23 @@ public BusbarState place(boolean placing, EnumBusbarShape shapeIn){ return this; } - /** Temporary, just for peaking */ - @Deprecated(forRemoval = true) - public void /*RailState*/ place(){ - boolean pPowered = false, pPlaceBlock = false, canMakeSlopes = false; - RailShape pShape = null; - // Above would be the method args - //------------------------------------------------------------------------- - - BlockPos posNorth = this.pos.north(); - BlockPos posSouth = this.pos.south(); - BlockPos posWest = this.pos.west(); - BlockPos posEast = this.pos.east(); - boolean hasNorth = this.hasNeighborBus(posNorth); - boolean hasSouth = this.hasNeighborBus(posSouth); - boolean hasWest = this.hasNeighborBus(posWest); - boolean hasEast = this.hasNeighborBus(posEast); - boolean ns = hasNorth || hasSouth; - boolean ew = hasWest || hasEast; - - RailShape railshape = null; - - if(ns && !ew){ - railshape = RailShape.NORTH_SOUTH; - } - - if(ew && !ns){ - railshape = RailShape.EAST_WEST; - } - - boolean se = hasSouth && hasEast; - boolean sw = hasSouth && hasWest; - boolean ne = hasNorth && hasEast; - boolean nw = hasNorth && hasWest; - if(!this.isStraight){ - if(se && !hasNorth && !hasWest){ - railshape = RailShape.SOUTH_EAST; - } - - if(sw && !hasNorth && !hasEast){ - railshape = RailShape.SOUTH_WEST; - } - - if(nw && !hasSouth && !hasEast){ - railshape = RailShape.NORTH_WEST; - } - - if(ne && !hasSouth && !hasWest){ - railshape = RailShape.NORTH_EAST; - } - } - - if(railshape == null){ - if(ns && ew){ - railshape = pShape; - }else if(ns){ - railshape = RailShape.NORTH_SOUTH; - }else if(ew){ - railshape = RailShape.EAST_WEST; - } - - if(!this.isStraight){ - if(pPowered){ - if(se){ - railshape = RailShape.SOUTH_EAST; - } - - if(sw){ - railshape = RailShape.SOUTH_WEST; - } - - if(ne){ - railshape = RailShape.NORTH_EAST; - } - - if(nw){ - railshape = RailShape.NORTH_WEST; - } - }else{ - if(nw){ - railshape = RailShape.NORTH_WEST; - } - - if(ne){ - railshape = RailShape.NORTH_EAST; - } - - if(sw){ - railshape = RailShape.SOUTH_WEST; - } - - if(se){ - railshape = RailShape.SOUTH_EAST; - } - } - } - } - - if(railshape == RailShape.NORTH_SOUTH && canMakeSlopes){ - if(BaseRailBlock.isRail(this.level, posNorth.above())){ - railshape = RailShape.ASCENDING_NORTH; - } - - if(BaseRailBlock.isRail(this.level, posSouth.above())){ - railshape = RailShape.ASCENDING_SOUTH; - } - } - - if(railshape == RailShape.EAST_WEST && canMakeSlopes){ - if(BaseRailBlock.isRail(this.level, posEast.above())){ - railshape = RailShape.ASCENDING_EAST; - } - - if(BaseRailBlock.isRail(this.level, posWest.above())){ - railshape = RailShape.ASCENDING_WEST; - } - } - - if(railshape == null){ - railshape = pShape; - } - - //updateConnections(railshape); - this.state = this.state.setValue(RailBlock.SHAPE, railshape); - if(pPlaceBlock || this.level.getBlockState(this.pos) != this.state){ - this.level.setBlock(this.pos, this.state, 3); - - for(int i = 0;i < this.connections.size();++i){ - BusbarState busState = getBus(this.connections.get(i)); - if(busState != null){ - busState.removeSoftConnections(); - if(busState.canConnectTo(this)){ - busState.connectTo(this); - } - } - } - } - - //return this; - } - + @SuppressWarnings("unused") private void connectTo(BusbarState state){ this.connections.add(state.pos); - BlockPos posDown = this.pos.below(); - BlockPos posUp = this.pos.above(); - BlockPos posNorth = this.pos.north(); - BlockPos posEast = this.pos.east(); - BlockPos posSouth = this.pos.south(); - BlockPos posWest = this.pos.west(); + final BlockPos posDown = this.pos.below(); + final BlockPos posUp = this.pos.above(); + final BlockPos posNorth = this.pos.north(); + final BlockPos posEast = this.pos.east(); + final BlockPos posSouth = this.pos.south(); + final BlockPos posWest = this.pos.west(); - boolean conDown = hasConnection(posDown); - boolean conUp = hasConnection(posUp); - boolean conNorth = hasConnection(posNorth); - boolean conSouth = hasConnection(posSouth); - boolean conWest = hasConnection(posWest); - boolean conEast = hasConnection(posEast); + final boolean conDown = hasConnection(posDown); + final boolean conUp = hasConnection(posUp); + final boolean conNorth = hasConnection(posNorth); + final boolean conSouth = hasConnection(posSouth); + final boolean conWest = hasConnection(posWest); + final boolean conEast = hasConnection(posEast); EnumBusbarShape shape = null; @@ -376,108 +218,9 @@ private void connectTo(BusbarState state){ shape = EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH; } - OverEngineered.log.debug( - "DEBUG\r\nconnectTo(\r\n\t" + - "Level: {}\r\n\t" + - "BlockState: {}\r\n\t" + - "Pos: {}\r\n\t" + - "Connections: {}\r\n)"+ - "{\r\n\t" + - "Level: {}\r\n\t" + - "State: {}\r\n\t" + - "Pos: {}\r\n\t" + - "Connections: {}\r\n\t" + - "Shape: {}\r\n" + - "}", - state.level, - state.state, - state.pos, - state.connections, - - this.level, - this.state, - this.pos, - this.connections, - shape - ); - this.state = this.state.setValue(BusbarBlock.SHAPE, shape); this.level.setBlock(this.pos, this.state, 3); } - - /** Temporary, just for peaking */ - @SuppressWarnings({"null", "unused"}) - @Deprecated(forRemoval = true) - private void connectTo(){ - BusbarState pState = null; - // Above would be the method args - //------------------------------------------------------------------------- - - this.connections.add(pState.pos); - BlockPos posNorth = this.pos.north(); - BlockPos posSouth = this.pos.south(); - BlockPos posWest = this.pos.west(); - BlockPos posEast = this.pos.east(); - boolean conNorth = hasConnection(posNorth); - boolean conSouth = hasConnection(posSouth); - boolean conWest = hasConnection(posWest); - boolean conEast = hasConnection(posEast); - RailShape shape = null; - if(conNorth || conSouth){ - shape = RailShape.NORTH_SOUTH; - } - - if(conWest || conEast){ - shape = RailShape.EAST_WEST; - } - - if(!this.isStraight){ - if(conSouth && conEast && !conNorth && !conWest){ - shape = RailShape.SOUTH_EAST; - } - - if(conSouth && conWest && !conNorth && !conEast){ - shape = RailShape.SOUTH_WEST; - } - - if(conNorth && conWest && !conSouth && !conEast){ - shape = RailShape.NORTH_WEST; - } - - if(conNorth && conEast && !conSouth && !conWest){ - shape = RailShape.NORTH_EAST; - } - } - - /* - if(railshape == RailShape.NORTH_SOUTH && canMakeSlopes){ - if(BaseRailBlock.isRail(this.level, blockpos.above())){ - railshape = RailShape.ASCENDING_NORTH; - } - - if(BaseRailBlock.isRail(this.level, blockpos1.above())){ - railshape = RailShape.ASCENDING_SOUTH; - } - } - - if(railshape == RailShape.EAST_WEST && canMakeSlopes){ - if(BaseRailBlock.isRail(this.level, blockpos3.above())){ - railshape = RailShape.ASCENDING_EAST; - } - - if(BaseRailBlock.isRail(this.level, blockpos2.above())){ - railshape = RailShape.ASCENDING_WEST; - } - } - */ - - if(shape == null){ - shape = RailShape.NORTH_SOUTH; - } - -// this.state = this.state.setValue(BusbarBlock.SHAPE, railshape); -// this.level.setBlock(this.pos, this.state, 3); - } private void removeSoftConnections(){ for(int i = 0;i < this.connections.size();i++){ From 04b193d42d24c44aea03e7b4fb379240368ebd04 Mon Sep 17 00:00:00 2001 From: TwistedGate <31029668+TwistedGate@users.noreply.github.com> Date: Tue, 23 Aug 2022 14:29:28 +0200 Subject: [PATCH 12/26] Fix recursion problem Don't know how this ended up fixing exactly, but.. i have to thank malte yet again for giving me pointers --- .../overengineered/client/ClientProxy.java | 2 +- .../common/blocks/busbar/BusbarBlock.java | 15 ++++++++++----- .../common/blocks/busbar/BusbarState.java | 2 +- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/main/java/twistedgate/overengineered/client/ClientProxy.java b/src/main/java/twistedgate/overengineered/client/ClientProxy.java index ee576ec..5ab7cf3 100644 --- a/src/main/java/twistedgate/overengineered/client/ClientProxy.java +++ b/src/main/java/twistedgate/overengineered/client/ClientProxy.java @@ -28,7 +28,7 @@ public void postInit(){ @Override public void completed(ParallelDispatchEvent event){ - // TODO Soon™ + // TODO Soonâ„¢ //setupManualPages(); } diff --git a/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java b/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java index 374db3e..b1a0886 100644 --- a/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java +++ b/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java @@ -103,7 +103,16 @@ public void setPlacedBy(Level level, BlockPos pos, BlockState state, LivingEntit @Override public void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean isMoving){ - state = updateDir(level, pos, state, true); + if(!oldState.is(state.getBlock())){ + state = updateDir(level, pos, state, true); + } + } + + @Override + public void neighborChanged(BlockState state, Level level, BlockPos pos, Block lastBlock, BlockPos fromPos, boolean isMoving){ + if(!level.isClientSide && level.getBlockState(pos).is(this)){ + state = updateDir(level, pos, state, false); + } } private BlockState updateDir(Level level, BlockPos pos, BlockState state, boolean placing){ @@ -115,10 +124,6 @@ private BlockState updateDir(Level level, BlockPos pos, BlockState state, boolea return new BusbarState(level, pos, state).place(placing, shape).getState(); } - @Override - public void neighborChanged(BlockState stateIn, Level levelIn, BlockPos posIn, Block lastBlockIn, BlockPos fromPosIn, boolean isMovingIn){ - } - @Override public BlockEntity newBlockEntity(BlockPos pPos, BlockState pState){ BusbarTileEntity te = OETileTypes.BUS.get().create(pPos, pState); diff --git a/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarState.java b/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarState.java index aea2d3e..9a73b3d 100644 --- a/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarState.java +++ b/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarState.java @@ -23,7 +23,7 @@ public BusbarState(Level pLevel, BlockPos pPos, BlockState pState){ EnumBusbarShape shape = this.state.getValue(BusbarBlock.SHAPE); - this.isStraight = !EnumBusbarShape.Type.STRAIGHT_SEGMENTS.contains(shape); + this.isStraight = false;//!EnumBusbarShape.Type.STRAIGHT_SEGMENTS.contains(shape); updateConnections(shape); } From 17ab02b09c3804f74aaa6d0a659c76f99c7ffc05 Mon Sep 17 00:00:00 2001 From: TwistedGate <31029668+TwistedGate@users.noreply.github.com> Date: Wed, 24 Aug 2022 22:28:24 +0200 Subject: [PATCH 13/26] =?UTF-8?q?Crouching=20rotates=20by=2090=C2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/blocks/busbar/BusbarBlock.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java b/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java index b1a0886..b78c495 100644 --- a/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java +++ b/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java @@ -57,15 +57,16 @@ public boolean propagatesSkylightDown(BlockState pState, BlockGetter pLevel, Blo public BlockState getStateForPlacement(BlockPlaceContext pContext){ Direction direction = pContext.getHorizontalDirection(); Direction face = pContext.getClickedFace(); + boolean crouching = pContext.getPlayer() != null ? pContext.getPlayer().isCrouching() : false; // @formatter:off EnumBusbarShape shape = switch(face){ - case DOWN -> (direction == Direction.EAST || direction == Direction.WEST) ? EnumBusbarShape.INSULATORS_UP_EAST_WEST : EnumBusbarShape.INSULATORS_UP_NORTH_SOUTH; - case UP -> (direction == Direction.EAST || direction == Direction.WEST) ? EnumBusbarShape.INSULATORS_DOWN_EAST_WEST : EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH; - case NORTH -> EnumBusbarShape.INSULATORS_SOUTH_UP_DOWN; - case EAST -> EnumBusbarShape.INSULATORS_WEST_UP_DOWN; - case SOUTH -> EnumBusbarShape.INSULATORS_NORTH_UP_DOWN; - case WEST -> EnumBusbarShape.INSULATORS_EAST_UP_DOWN; + case DOWN -> (direction == Direction.EAST || direction == Direction.WEST) != crouching ? EnumBusbarShape.INSULATORS_UP_EAST_WEST : EnumBusbarShape.INSULATORS_UP_NORTH_SOUTH; + case UP -> (direction == Direction.EAST || direction == Direction.WEST) != crouching ? EnumBusbarShape.INSULATORS_DOWN_EAST_WEST : EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH; + case NORTH -> crouching ? EnumBusbarShape.INSULATORS_SOUTH_EAST_WEST : EnumBusbarShape.INSULATORS_SOUTH_UP_DOWN; + case EAST -> crouching ? EnumBusbarShape.INSULATORS_WEST_NORTH_SOUTH : EnumBusbarShape.INSULATORS_WEST_UP_DOWN; + case SOUTH -> crouching ? EnumBusbarShape.INSULATORS_NORTH_EAST_WEST : EnumBusbarShape.INSULATORS_NORTH_UP_DOWN; + case WEST -> crouching ? EnumBusbarShape.INSULATORS_EAST_NORTH_SOUTH : EnumBusbarShape.INSULATORS_EAST_UP_DOWN; default -> EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH; }; // @formatter:on From 8fdcc536574251a61f9096759b12d2de84a4ea09 Mon Sep 17 00:00:00 2001 From: TwistedGate <31029668+TwistedGate@users.noreply.github.com> Date: Wed, 24 Aug 2022 22:30:30 +0200 Subject: [PATCH 14/26] Cache voxel shapes --- .../common/blocks/busbar/BusbarBlock.java | 123 +++++++++++++----- 1 file changed, 90 insertions(+), 33 deletions(-) diff --git a/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java b/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java index b78c495..9ccc976 100644 --- a/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java +++ b/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java @@ -1,5 +1,9 @@ package twistedgate.overengineered.common.blocks.busbar; +import java.util.HashMap; +import java.util.Map; +import java.util.function.Predicate; + import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.world.InteractionHand; @@ -26,6 +30,7 @@ import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; +import twistedgate.overengineered.OverEngineered; import twistedgate.overengineered.common.OETileTypes; import twistedgate.overengineered.common.blocks.OEBlockBase; import twistedgate.overengineered.common.blocks.tileentity.BusbarTileEntity; @@ -93,8 +98,13 @@ public InteractionResult use(BlockState pState, Level pLevel, BlockPos pPos, Pla return InteractionResult.SUCCESS; } } - } + + if(pPlayer.getItemInHand(pHand).isEmpty()){ + re_set_shapes = true; + return InteractionResult.SUCCESS; + } + return InteractionResult.PASS; } @@ -136,45 +146,92 @@ public BlockEntityTicker getTicker(Level pLevel, Bloc return createTickerHelper(pLevel.isClientSide, pBlockEntityType, OETileTypes.BUS); } + static final VoxelShape MISSING_SHAPE = Shapes.create(0.125, 0.125, 0.125, 0.875, 0.875, 0.875); + static Map SHAPES_CACHE = makeShapeCache(); + + /** + * @deprecated // TODO To be removed once the Shapes are properly set up + */ + @Deprecated(forRemoval = true) + static boolean re_set_shapes = false; + @Override public VoxelShape getShape(BlockState pState, BlockGetter pLevel, BlockPos pPos, CollisionContext pContext){ - // TODO Cache them, compress and reuse duplicates + if(re_set_shapes){ + SHAPES_CACHE = makeShapeCache(); + re_set_shapes = false; + OverEngineered.log.info("Shapes Re-set."); + } - // @formatter:off - switch(pState.getValue(SHAPE)){ - case INSULATORS_UP_NORTH_SOUTH: case FLOATING_UP_NORTH_SOUTH: { - return Shapes.create(0.125, 0.75, 0.0, 0.875, 1.0, 1.0); - } - case INSULATORS_DOWN_EAST_WEST: case FLOATING_DOWN_EAST_WEST:{ - return Shapes.create(0.0, 0.0, 0.125, 1.0, 0.25, 0.875); - } - case INSULATORS_UP_EAST_WEST: case FLOATING_UP_EAST_WEST:{ - return Shapes.create(0.0, 0.75, 0.125, 1.0, 1.0, 0.875); - } - case INSULATORS_DOWN_NORTH_SOUTH: case FLOATING_DOWN_NORTH_SOUTH:{ - return Shapes.create(0.125, 0.0, 0.0, 0.875, 0.25, 1.0); - } - - case INSULATORS_NORTH_UP_DOWN: return Shapes.create(0.125, 0.0, 0.0, 0.875, 1.0, 0.25); - case INSULATORS_EAST_UP_DOWN: return Shapes.create(0.75, 0.0, 0.125, 1.0, 1.0, 0.875); - case INSULATORS_SOUTH_UP_DOWN: return Shapes.create(0.125, 0.0, 0.75, 0.875, 1.0, 1.0); - case INSULATORS_WEST_UP_DOWN: return Shapes.create(0.0, 0.0, 0.125, 0.25, 1.0, 0.875); - - case BEND_DOWN_NORTH_EAST: return Shapes.create(0.125, 0.0, 0.0, 1.0, 0.25, 0.875); - case BEND_DOWN_EAST_SOUTH: return Shapes.create(0.125, 0.0, 0.125, 1.0, 0.25, 1.0); - case BEND_DOWN_SOUTH_WEST: return Shapes.create(0.0, 0.0, 0.125, 0.875, 0.25, 1.0); - case BEND_DOWN_WEST_NORTH: return Shapes.create(0.0, 0.0, 0.0, 0.875, 0.25, 0.875); + return SHAPES_CACHE.getOrDefault(pState.getValue(SHAPE), MISSING_SHAPE); + } + + private static Map makeShapeCache(){ + Map map = new HashMap<>(); + for(EnumBusbarShape shape:EnumBusbarShape.values()){ - case BEND_UP_NORTH_EAST: return Shapes.create(0.125, 0.75, 0.0, 1.0, 1.0, 0.875); - case BEND_UP_EAST_SOUTH: return Shapes.create(0.125, 0.75, 0.125, 1.0, 1.0, 1.0); - case BEND_UP_SOUTH_WEST: return Shapes.create(0.0, 0.75, 0.125, 0.875, 1.0, 1.0); - case BEND_UP_WEST_NORTH: return Shapes.create(0.0, 0.75, 0.0, 0.875, 1.0, 0.875); + // @formatter:off + VoxelShape vShape = switch(shape){ + case INSULATORS_DOWN_NORTH_SOUTH, FLOATING_DOWN_NORTH_SOUTH -> Shapes.create(0.125, 0.0, 0.0, 0.875, 0.25, 1.0); + case INSULATORS_DOWN_EAST_WEST, FLOATING_DOWN_EAST_WEST -> Shapes.create(0.0, 0.0, 0.125, 1.0, 0.25, 0.875); + case INSULATORS_UP_NORTH_SOUTH, FLOATING_UP_NORTH_SOUTH -> Shapes.create(0.125, 0.75, 0.0, 0.875, 1.0, 1.0); + case INSULATORS_UP_EAST_WEST, FLOATING_UP_EAST_WEST -> Shapes.create(0.0, 0.75, 0.125, 1.0, 1.0, 0.875); + + case INSULATORS_NORTH_UP_DOWN, FLOATING_NORTH_UP_DOWN -> Shapes.create(0.125, 0.0, 0.0, 0.875, 1.0, 0.25); + case INSULATORS_EAST_UP_DOWN, FLOATING_EAST_UP_DOWN -> Shapes.create(0.75, 0.0, 0.125, 1.0, 1.0, 0.875); + case INSULATORS_SOUTH_UP_DOWN, FLOATING_SOUTH_UP_DOWN -> Shapes.create(0.125, 0.0, 0.75, 0.875, 1.0, 1.0); + case INSULATORS_WEST_UP_DOWN, FLOATING_WEST_UP_DOWN -> Shapes.create(0.0, 0.0, 0.125, 0.25, 1.0, 0.875); + + case INSULATORS_NORTH_EAST_WEST, FLOATING_NORTH_EAST_WEST -> Shapes.create(0.0, 0.125, 0.0, 1.0, 0.875, 0.25); + case INSULATORS_SOUTH_EAST_WEST, FLOATING_SOUTH_EAST_WEST -> Shapes.create(0.0, 0.125, 0.75, 1.0, 0.875, 1.0); + case INSULATORS_EAST_NORTH_SOUTH, FLOATING_EAST_NORTH_SOUTH -> Shapes.create(0.75, 0.125, 0.0, 1.0, 0.875, 1.0); + case INSULATORS_WEST_NORTH_SOUTH, FLOATING_WEST_NORTH_SOUTH -> Shapes.create(0.0, 0.125, 0.0, 0.25, 0.875, 1.0); + + case EDGE_INSIDE_DOWN_NORTH_UP_SOUTH -> Shapes.or(Shapes.create(0.125, 0.0, 0.0, 0.875, 0.25, 1.0), Shapes.create(0.125, 0.0, 0.0, 0.875, 1.0, 0.25)).optimize(); + case EDGE_INSIDE_DOWN_SOUTH_UP_NORTH -> Shapes.or(Shapes.create(0.125, 0.0, 0.0, 0.875, 0.25, 1.0), Shapes.create(0.125, 0.0, 0.75, 0.875, 1.0, 1.0)).optimize(); + case EDGE_INSIDE_DOWN_EAST_UP_WEST -> Shapes.or(Shapes.create(0.0, 0.0, 0.125, 1.0, 0.25, 0.875), Shapes.create(0.75, 0.0, 0.125, 1.0, 1.0, 0.875)).optimize(); + case EDGE_INSIDE_DOWN_WEST_UP_EAST -> Shapes.or(Shapes.create(0.0, 0.0, 0.125, 1.0, 0.25, 0.875), Shapes.create(0.0, 0.0, 0.125, 0.25, 1.0, 0.875)).optimize(); + + case EDGE_INSIDE_UP_NORTH_DOWN_SOUTH -> Shapes.or(Shapes.create(0.125, 0.75, 0.0, 0.875, 1.0, 1.0), Shapes.create(0.125, 0.0, 0.0, 0.875, 1.0, 0.25)).optimize(); + case EDGE_INSIDE_UP_SOUTH_DOWN_NORTH -> Shapes.or(Shapes.create(0.125, 0.75, 0.0, 0.875, 1.0, 1.0), Shapes.create(0.125, 0.0, 0.75, 0.875, 1.0, 1.0)).optimize(); + case EDGE_INSIDE_UP_EAST_DOWN_WEST -> Shapes.or(Shapes.create(0.0, 0.75, 0.125, 1.0, 1.0, 0.875), Shapes.create(0.75, 0.0, 0.125, 1.0, 1.0, 0.875)).optimize(); + case EDGE_INSIDE_UP_WEST_DOWN_EAST -> Shapes.or(Shapes.create(0.0, 0.75, 0.125, 1.0, 1.0, 0.875), Shapes.create(0.0, 0.0, 0.125, 0.25, 1.0, 0.875)).optimize(); + + case BEND_DOWN_NORTH_EAST -> Shapes.create(0.125, 0.0, 0.0, 1.0, 0.25, 0.875); + case BEND_DOWN_EAST_SOUTH -> Shapes.create(0.125, 0.0, 0.125, 1.0, 0.25, 1.0); + case BEND_DOWN_SOUTH_WEST -> Shapes.create(0.0, 0.0, 0.125, 0.875, 0.25, 1.0); + case BEND_DOWN_WEST_NORTH -> Shapes.create(0.0, 0.0, 0.0, 0.875, 0.25, 0.875); + + case BEND_UP_NORTH_EAST -> Shapes.create(0.125, 0.75, 0.0, 1.0, 1.0, 0.875); + case BEND_UP_EAST_SOUTH -> Shapes.create(0.125, 0.75, 0.125, 1.0, 1.0, 1.0); + case BEND_UP_SOUTH_WEST -> Shapes.create(0.0, 0.75, 0.125, 0.875, 1.0, 1.0); + case BEND_UP_WEST_NORTH -> Shapes.create(0.0, 0.75, 0.0, 0.875, 1.0, 0.875); + + // TODO Missing wall bends + + case EDGE_OUTSIDE_DOWN_NORTH_UP_SOUTH -> Shapes.create(0.125, 0.0, 0.75, 0.875, 0.25, 1.0); + case EDGE_OUTSIDE_DOWN_EAST_UP_WEST -> Shapes.create(0.0, 0.0, 0.125, 0.25, 0.25, 0.875); + case EDGE_OUTSIDE_DOWN_SOUTH_UP_NORTH -> Shapes.create(0.125, 0.0, 0.0, 0.875, 0.25, 0.25); + case EDGE_OUTSIDE_DOWN_WEST_UP_EAST -> Shapes.create(0.75, 0.0, 0.125, 1.0, 0.25, 0.875); + + case EDGE_OUTSIDE_UP_NORTH_DOWN_SOUTH -> Shapes.create(0.125, 0.75, 0.0, 0.875, 1.0, 0.25); + case EDGE_OUTSIDE_UP_EAST_DOWN_WEST -> Shapes.create(0.75, 0.75, 0.125, 1.0, 1.0, 0.875); + case EDGE_OUTSIDE_UP_SOUTH_DOWN_NORTH -> Shapes.create(0.125, 0.75, 0.75, 0.875, 1.0, 1.0); + case EDGE_OUTSIDE_UP_WEST_DOWN_EAST -> Shapes.create(0.0, 0.75, 0.125, 0.25, 1.0, 0.875); + + default -> null; + }; + // @formatter:on - default:{ - return Shapes.create(0.0, 0.0, 0.0, 1.0, 1.0, 1.0); + if(vShape == null){ + OverEngineered.log.info("Missing voxelshape for shape \"" + shape + "\""); + continue; } + + map.put(shape, vShape); } - // @formatter:on + + return map; } public static boolean isBusbar(Level level, BlockPos pos){ From 376fa87c1ca3b6419bb9360a546828151aec1ae7 Mon Sep 17 00:00:00 2001 From: TwistedGate <31029668+TwistedGate@users.noreply.github.com> Date: Mon, 12 Sep 2022 16:23:03 +0200 Subject: [PATCH 15/26] Fixed faulty Screwdriver and Cutter checks for external content --- .../twistedgate/overengineered/utils/ExternalModContent.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/twistedgate/overengineered/utils/ExternalModContent.java b/src/main/java/twistedgate/overengineered/utils/ExternalModContent.java index 1329926..7532f06 100644 --- a/src/main/java/twistedgate/overengineered/utils/ExternalModContent.java +++ b/src/main/java/twistedgate/overengineered/utils/ExternalModContent.java @@ -22,7 +22,7 @@ public static boolean isIEHammer(Item item){ } public static boolean isIEScrewdriver(ItemStack stack){ - return isIEHammer(stack.getItem()); + return isIEScrewdriver(stack.getItem()); } public static boolean isIEScrewdriver(Item item){ @@ -30,7 +30,7 @@ public static boolean isIEScrewdriver(Item item){ } public static boolean isIEWirecutter(ItemStack stack){ - return isIEHammer(stack.getItem()); + return isIEWirecutter(stack.getItem()); } public static boolean isIEWirecutter(Item item){ From 0af5e3996abdcdfd56b748f63c4ae0364e177a0a Mon Sep 17 00:00:00 2001 From: TwistedGate <31029668+TwistedGate@users.noreply.github.com> Date: Wed, 14 Jun 2023 15:54:08 +0200 Subject: [PATCH 16/26] Bump IE to `1.18.2-8.4.0-161` --- gradle.properties | 2 +- src/main/resources/META-INF/mods.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index e401021..bec354f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,7 +5,7 @@ version_minecraft=1.18.2 version_forge=40.1.48 version_fml_mappings=1.18.2 version_parchment=1.18.1-2022.03.06-1.18.2 -version_ie=1.18.2-8.1.0-150 +version_ie=1.18.2-8.4.0-161 version_jei=9.7.0.195 version_ct=9.1.156 \ No newline at end of file diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index c9dc2c9..492faf1 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -21,7 +21,7 @@ Random bits and bobs, here and there. Possibly containing QoL things. [[dependencies.overengineered]] modId="immersiveengineering" mandatory=true - versionRange="[1.18.2-8.0.2-149,)" + versionRange="[1.18.2-8.4.0-161,)" ordering="BEFORE" side="BOTH" From 21c4cbd47cfc867258f6a8ec78b9e0217377fee0 Mon Sep 17 00:00:00 2001 From: TwistedGate <31029668+TwistedGate@users.noreply.github.com> Date: Wed, 14 Jun 2023 15:57:29 +0200 Subject: [PATCH 17/26] Bump Forge `40.1.48` --- src/main/resources/META-INF/mods.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index 492faf1..6a43f1d 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -28,7 +28,7 @@ Random bits and bobs, here and there. Possibly containing QoL things. [[dependencies.overengineered]] modId="forge" mandatory=true - versionRange="[40.1.25,)" + versionRange="[40.1.48,)" ordering="NONE" side="BOTH" From c97ee5d153e5b410f69837b2a0cf92f89bd06f30 Mon Sep 17 00:00:00 2001 From: TwistedGate <31029668+TwistedGate@users.noreply.github.com> Date: Wed, 14 Jun 2023 16:03:45 +0200 Subject: [PATCH 18/26] This is such a mess. Spoiler: Doesnt work. --- .../common/data/OEBlockStates.java | 15 - src/generated/resources/.cache/cache | 4 +- .../overengineered/blockstates/busbar.json | 54 --- .../block/busbar_without_insulators.json | 9 - ...sbar_without_insulators_pre_y_rotated.json | 9 - .../common/blocks/busbar/BusbarBlock.java | 164 ++++++--- .../common/blocks/busbar/BusbarCon.java | 326 ++++++++++++++++++ .../common/blocks/busbar/BusbarState.java | 13 +- .../utils/enums/EnumBusbarShape.java | 205 +++++------ 9 files changed, 539 insertions(+), 260 deletions(-) delete mode 100644 src/generated/resources/assets/overengineered/models/block/busbar_without_insulators.json delete mode 100644 src/generated/resources/assets/overengineered/models/block/busbar_without_insulators_pre_y_rotated.json create mode 100644 src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarCon.java diff --git a/src/datagen/java/twistedgate/overengineered/common/data/OEBlockStates.java b/src/datagen/java/twistedgate/overengineered/common/data/OEBlockStates.java index 857887b..cfd9a8a 100644 --- a/src/datagen/java/twistedgate/overengineered/common/data/OEBlockStates.java +++ b/src/datagen/java/twistedgate/overengineered/common/data/OEBlockStates.java @@ -36,10 +36,6 @@ private void busbar(){ BlockModelBuilder model_insulators_normal = busModel("models/block/obj/busbar/busbar_a.obj", "_with_insulators"); BlockModelBuilder model_insulators_rotated = busModel("models/block/obj/busbar/busbar_a_alt.obj", "_with_insulators_pre_y_rotated"); - // Floating - BlockModelBuilder model_floating_normal = busModel("models/block/obj/busbar/busbar_b.obj", "_without_insulators"); - BlockModelBuilder model_floating_rotated = busModel("models/block/obj/busbar/busbar_b_alt.obj", "_without_insulators_pre_y_rotated"); - BlockModelBuilder model_bend = busModel("models/block/obj/busbar/busbar_bend.obj", "_bend"); BlockModelBuilder model_edge_inside = busModel("models/block/obj/busbar/busbar_edge_inside.obj", "_horizontal_up"); BlockModelBuilder model_edge_outside = busModel("models/block/obj/busbar/busbar_edge_outside.obj", "_horizontal_down"); @@ -47,9 +43,6 @@ private void busbar(){ model_insulators_normal.assertExistence(); model_insulators_rotated.assertExistence(); - model_floating_normal.assertExistence(); - model_floating_rotated.assertExistence(); - model_bend.assertExistence(); model_edge_inside.assertExistence(); model_edge_outside.assertExistence(); @@ -59,17 +52,9 @@ private void busbar(){ bus(EnumBusbarShape.INSULATORS_UP_NORTH_SOUTH, model_insulators_normal, 180, 0); bus(EnumBusbarShape.INSULATORS_UP_EAST_WEST, model_insulators_normal, 180, 90); - bus(EnumBusbarShape.FLOATING_DOWN_NORTH_SOUTH, model_floating_normal, 0, 0); - bus(EnumBusbarShape.FLOATING_DOWN_EAST_WEST, model_floating_normal, 0, 90); - bus(EnumBusbarShape.FLOATING_UP_NORTH_SOUTH, model_floating_normal, 180, 0); - bus(EnumBusbarShape.FLOATING_UP_EAST_WEST, model_floating_normal, 180, 90); - EnumBusbarShape.Type.STRAIGHT_INSULATORS_WALL_NORMAL.forEachIndexed((i, shape) -> bus(shape, model_insulators_normal, -90, 90 * i)); EnumBusbarShape.Type.STRAIGHT_INSULATORS_WALL_ROTATED.forEachIndexed((i, shape) -> bus(shape, model_insulators_rotated, -90, 90 * i)); - EnumBusbarShape.Type.STRAIGHT_FLOATING_WALL_NORMAL.forEachIndexed((i, shape) -> bus(shape, model_floating_normal, -90, 90 * i)); - EnumBusbarShape.Type.STRAIGHT_FLOATING_WALL_ROTATED.forEachIndexed((i, shape) -> bus(shape, model_floating_rotated, -90, 90 * i)); - EnumBusbarShape.Type.BENDS_FLOOR.forEachIndexed((i, shape) -> bus(shape, model_bend, 0, 90 + 90 * i)); EnumBusbarShape.Type.BENDS_CEILING.forEachIndexed((i, shape) -> bus(shape, model_bend, 180, 180 + 90 * i)); EnumBusbarShape.Type.BENDS_WALLS.forEachIndexed((i, shape) -> bus(shape, model_bend, -90, 90 * i)); diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 658c4fa..566a542 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -1,11 +1,9 @@ -d8c80785920283e4fe9e0230b1f92e0824da0dff assets/overengineered/blockstates/busbar.json +0b32cc406cca12760e38534d246d526d7379c7d2 assets/overengineered/blockstates/busbar.json 165737f978732b3be1b991273410046a62c3602b assets/overengineered/models/block/busbar_bend.json d38cc03cf37de4a0b62b6eb9167fb1282b38eedf assets/overengineered/models/block/busbar_horizontal_down.json a3f79a2d4727885bc80374947d26cf1413cab082 assets/overengineered/models/block/busbar_horizontal_up.json 505c39a86a3e6ac0f2f99af30685e9ff435a7d3a assets/overengineered/models/block/busbar_with_insulators.json 83c90e24f79a0745afff4c0889ff8fb4c5191978 assets/overengineered/models/block/busbar_with_insulators_pre_y_rotated.json -67e6948440b91969741558fa0e319bfa0623ecdc assets/overengineered/models/block/busbar_without_insulators.json -95c68499016695a3c9c71e95d44b78e5a7b70abb assets/overengineered/models/block/busbar_without_insulators_pre_y_rotated.json 47d3511e428faccc03c73d493604da978bad617a assets/overengineered/models/item/busbar.json f669ede4831f92d60da61cf680f634f40a2c6c2b data/overengineered/advancements/recipes/overengineered/busbar.json 84e62a1037f58c750ce069f12abdafe49f8be47b data/overengineered/advancements/recipes/overengineered/busbar2.json diff --git a/src/generated/resources/assets/overengineered/blockstates/busbar.json b/src/generated/resources/assets/overengineered/blockstates/busbar.json index f66f7cf..345334b 100644 --- a/src/generated/resources/assets/overengineered/blockstates/busbar.json +++ b/src/generated/resources/assets/overengineered/blockstates/busbar.json @@ -54,60 +54,6 @@ "x": -90, "y": 270 }, - "shape=floating_down_north_south": { - "model": "overengineered:block/busbar_without_insulators" - }, - "shape=floating_down_east_west": { - "model": "overengineered:block/busbar_without_insulators", - "y": 90 - }, - "shape=floating_up_north_south": { - "model": "overengineered:block/busbar_without_insulators", - "x": 180 - }, - "shape=floating_up_east_west": { - "model": "overengineered:block/busbar_without_insulators", - "x": 180, - "y": 90 - }, - "shape=floating_north_up_down": { - "model": "overengineered:block/busbar_without_insulators", - "x": -90 - }, - "shape=floating_east_up_down": { - "model": "overengineered:block/busbar_without_insulators", - "x": -90, - "y": 90 - }, - "shape=floating_south_up_down": { - "model": "overengineered:block/busbar_without_insulators", - "x": -90, - "y": 180 - }, - "shape=floating_west_up_down": { - "model": "overengineered:block/busbar_without_insulators", - "x": -90, - "y": 270 - }, - "shape=floating_north_east_west": { - "model": "overengineered:block/busbar_without_insulators_pre_y_rotated", - "x": -90 - }, - "shape=floating_east_north_south": { - "model": "overengineered:block/busbar_without_insulators_pre_y_rotated", - "x": -90, - "y": 90 - }, - "shape=floating_south_east_west": { - "model": "overengineered:block/busbar_without_insulators_pre_y_rotated", - "x": -90, - "y": 180 - }, - "shape=floating_west_north_south": { - "model": "overengineered:block/busbar_without_insulators_pre_y_rotated", - "x": -90, - "y": 270 - }, "shape=bend_down_north_east": { "model": "overengineered:block/busbar_bend", "y": 90 diff --git a/src/generated/resources/assets/overengineered/models/block/busbar_without_insulators.json b/src/generated/resources/assets/overengineered/models/block/busbar_without_insulators.json deleted file mode 100644 index 69625dd..0000000 --- a/src/generated/resources/assets/overengineered/models/block/busbar_without_insulators.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "textures": { - "texture": "overengineered:block/obj/busbar", - "particle": "overengineered:block/obj/busbar" - }, - "loader": "forge:obj", - "model": "overengineered:models/block/obj/busbar/busbar_b.obj", - "flip-v": true -} \ No newline at end of file diff --git a/src/generated/resources/assets/overengineered/models/block/busbar_without_insulators_pre_y_rotated.json b/src/generated/resources/assets/overengineered/models/block/busbar_without_insulators_pre_y_rotated.json deleted file mode 100644 index 908434e..0000000 --- a/src/generated/resources/assets/overengineered/models/block/busbar_without_insulators_pre_y_rotated.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "textures": { - "texture": "overengineered:block/obj/busbar", - "particle": "overengineered:block/obj/busbar" - }, - "loader": "forge:obj", - "model": "overengineered:models/block/obj/busbar/busbar_b_alt.obj", - "flip-v": true -} \ No newline at end of file diff --git a/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java b/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java index 9ccc976..20f6737 100644 --- a/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java +++ b/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java @@ -1,11 +1,15 @@ package twistedgate.overengineered.common.blocks.busbar; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; -import java.util.function.Predicate; + +import com.mojang.math.Vector3f; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.core.particles.DustParticleOptions; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.entity.LivingEntity; @@ -27,6 +31,7 @@ import net.minecraft.world.level.material.MaterialColor; import net.minecraft.world.level.material.PushReaction; import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.Shapes; import net.minecraft.world.phys.shapes.VoxelShape; @@ -59,13 +64,13 @@ public boolean propagatesSkylightDown(BlockState pState, BlockGetter pLevel, Blo } @Override - public BlockState getStateForPlacement(BlockPlaceContext pContext){ - Direction direction = pContext.getHorizontalDirection(); - Direction face = pContext.getClickedFace(); - boolean crouching = pContext.getPlayer() != null ? pContext.getPlayer().isCrouching() : false; + public BlockState getStateForPlacement(BlockPlaceContext context){ + Direction facing = context.getClickedFace(); + Direction direction = context.getHorizontalDirection(); + boolean crouching = context.getPlayer() != null ? context.getPlayer().isCrouching() : false; // @formatter:off - EnumBusbarShape shape = switch(face){ + EnumBusbarShape shape = switch(facing){ case DOWN -> (direction == Direction.EAST || direction == Direction.WEST) != crouching ? EnumBusbarShape.INSULATORS_UP_EAST_WEST : EnumBusbarShape.INSULATORS_UP_NORTH_SOUTH; case UP -> (direction == Direction.EAST || direction == Direction.WEST) != crouching ? EnumBusbarShape.INSULATORS_DOWN_EAST_WEST : EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH; case NORTH -> crouching ? EnumBusbarShape.INSULATORS_SOUTH_EAST_WEST : EnumBusbarShape.INSULATORS_SOUTH_UP_DOWN; @@ -76,32 +81,83 @@ public BlockState getStateForPlacement(BlockPlaceContext pContext){ }; // @formatter:on - return defaultBlockState().setValue(SHAPE, shape); + return this.defaultBlockState().setValue(SHAPE, shape); } @Override public InteractionResult use(BlockState pState, Level pLevel, BlockPos pPos, Player pPlayer, InteractionHand pHand, BlockHitResult pHit){ - if(ExternalModContent.isIEHammer(pPlayer.getItemInHand(pHand))){ - EnumBusbarShape shape = pState.getValue(SHAPE); - if(EnumBusbarShape.Type.STRAIGHT_SEGMENTS.contains(shape)){ - EnumBusbarShape newShape = null; - - // @formatter:off - if(shape == EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH)newShape = EnumBusbarShape.FLOATING_DOWN_NORTH_SOUTH; - if(shape == EnumBusbarShape.FLOATING_DOWN_NORTH_SOUTH) newShape = EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH; - if(shape == EnumBusbarShape.INSULATORS_DOWN_EAST_WEST) newShape = EnumBusbarShape.FLOATING_DOWN_EAST_WEST; - if(shape == EnumBusbarShape.FLOATING_DOWN_EAST_WEST) newShape = EnumBusbarShape.INSULATORS_DOWN_EAST_WEST; - // @formatter:on + ItemStack held = pPlayer.getItemInHand(InteractionHand.MAIN_HAND); + + if(ExternalModContent.isIEHammer(held)){ + BlockPos lastPos = null; + BlockPos currentPos = pPos; + + retLabel:for(int i = 0;i < 32;i++){ + BlockState state = pLevel.getBlockState(currentPos); + if(state.getBlock() == this){ + EnumBusbarShape shape = state.getValue(SHAPE); + + List list = new ArrayList<>(); + shape.connectionOffsets(list, currentPos); + + for(BlockPos p:list){ + if((lastPos == null || p != lastPos) && isBusbar(pLevel, p)){ + if(p == pPos) break retLabel; + lastPos = currentPos; + currentPos = p; + break; + } + } + } + } + + DustParticleOptions src = new DustParticleOptions(new Vector3f(Vec3.fromRGB24(0xFF0000)), 1.0F); + DustParticleOptions dst = new DustParticleOptions(new Vector3f(Vec3.fromRGB24(0x00FF00)), 1.0F); + + pLevel.addParticle(src, pPos.getX() + .5, pPos.getY() + .5, pPos.getZ() + .5, 0.0, 0.0, 0.0); + pLevel.addParticle(dst, currentPos.getX() + .5, currentPos.getY() + .5, currentPos.getZ() + .5, 0.0, 0.0, 0.0); + OverEngineered.log.info("End appears to be at {}", currentPos); + + return InteractionResult.SUCCESS; + } + + if(ExternalModContent.isIEScrewdriver(held)){ + final BusbarCon bus = BusbarCon.create(pLevel, pPos, pState); + if(bus != null){ + bus.removeExistingConnections(); + OverEngineered.log.info("connections: {}", bus.freePoints.size()); - if(newShape != null && newShape != shape){ - pLevel.setBlock(pPos, pState.setValue(SHAPE, newShape), 3); - return InteractionResult.SUCCESS; + DustParticleOptions dust = new DustParticleOptions(new Vector3f(Vec3.fromRGB24(0x00FF00)), 1.0F); + for(BlockPos p:bus.freePoints){ + pLevel.addParticle(dust, p.getX() + .5, p.getY() + .5, p.getZ() + .5, 0.0, 0.0, 0.0); } } + + return InteractionResult.SUCCESS; } - if(pPlayer.getItemInHand(pHand).isEmpty()){ - re_set_shapes = true; + if(held.isEmpty()){ + EnumBusbarShape shape = pState.getValue(SHAPE); + + List connections; + { + List list = new ArrayList<>(); + shape.connectionOffsets(list, pPos); + for(int i = 0;i < list.size();i++){ + BlockState state = pLevel.getBlockState(list.get(i)); + if(state.getBlock() != this){ + list.remove(i--); + } + } + connections = list; + } + + DustParticleOptions dust = new DustParticleOptions(new Vector3f(Vec3.fromRGB24(0x0000FF)), 1.0F); + for(int i = 0;i < connections.size();i++){ + BlockPos currentPos = connections.get(i); + pLevel.addParticle(dust, currentPos.getX() + .5, currentPos.getY() + .5, currentPos.getZ() + .5, 0.0, 0.0, 0.0); + } + return InteractionResult.SUCCESS; } @@ -115,17 +171,24 @@ public void setPlacedBy(Level level, BlockPos pos, BlockState state, LivingEntit @Override public void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean isMoving){ if(!oldState.is(state.getBlock())){ - state = updateDir(level, pos, state, true); + final BusbarCon bus = BusbarCon.create(level, pos, state); + if(bus != null){ + bus.onPlace(true); + } + +// state = updateDir(level, pos, state, true); } } @Override public void neighborChanged(BlockState state, Level level, BlockPos pos, Block lastBlock, BlockPos fromPos, boolean isMoving){ if(!level.isClientSide && level.getBlockState(pos).is(this)){ - state = updateDir(level, pos, state, false); +// state = updateDir(level, pos, state, false); } } + @Deprecated + @SuppressWarnings("unused") private BlockState updateDir(Level level, BlockPos pos, BlockState state, boolean placing){ if(level.isClientSide){ return state; @@ -147,22 +210,10 @@ public BlockEntityTicker getTicker(Level pLevel, Bloc } static final VoxelShape MISSING_SHAPE = Shapes.create(0.125, 0.125, 0.125, 0.875, 0.875, 0.875); - static Map SHAPES_CACHE = makeShapeCache(); - - /** - * @deprecated // TODO To be removed once the Shapes are properly set up - */ - @Deprecated(forRemoval = true) - static boolean re_set_shapes = false; + static final Map SHAPES_CACHE = makeShapeCache(); @Override public VoxelShape getShape(BlockState pState, BlockGetter pLevel, BlockPos pPos, CollisionContext pContext){ - if(re_set_shapes){ - SHAPES_CACHE = makeShapeCache(); - re_set_shapes = false; - OverEngineered.log.info("Shapes Re-set."); - } - return SHAPES_CACHE.getOrDefault(pState.getValue(SHAPE), MISSING_SHAPE); } @@ -172,20 +223,20 @@ private static Map makeShapeCache(){ // @formatter:off VoxelShape vShape = switch(shape){ - case INSULATORS_DOWN_NORTH_SOUTH, FLOATING_DOWN_NORTH_SOUTH -> Shapes.create(0.125, 0.0, 0.0, 0.875, 0.25, 1.0); - case INSULATORS_DOWN_EAST_WEST, FLOATING_DOWN_EAST_WEST -> Shapes.create(0.0, 0.0, 0.125, 1.0, 0.25, 0.875); - case INSULATORS_UP_NORTH_SOUTH, FLOATING_UP_NORTH_SOUTH -> Shapes.create(0.125, 0.75, 0.0, 0.875, 1.0, 1.0); - case INSULATORS_UP_EAST_WEST, FLOATING_UP_EAST_WEST -> Shapes.create(0.0, 0.75, 0.125, 1.0, 1.0, 0.875); + case INSULATORS_DOWN_NORTH_SOUTH -> Shapes.create(0.125, 0.0, 0.0, 0.875, 0.25, 1.0); + case INSULATORS_DOWN_EAST_WEST -> Shapes.create(0.0, 0.0, 0.125, 1.0, 0.25, 0.875); + case INSULATORS_UP_NORTH_SOUTH -> Shapes.create(0.125, 0.75, 0.0, 0.875, 1.0, 1.0); + case INSULATORS_UP_EAST_WEST -> Shapes.create(0.0, 0.75, 0.125, 1.0, 1.0, 0.875); - case INSULATORS_NORTH_UP_DOWN, FLOATING_NORTH_UP_DOWN -> Shapes.create(0.125, 0.0, 0.0, 0.875, 1.0, 0.25); - case INSULATORS_EAST_UP_DOWN, FLOATING_EAST_UP_DOWN -> Shapes.create(0.75, 0.0, 0.125, 1.0, 1.0, 0.875); - case INSULATORS_SOUTH_UP_DOWN, FLOATING_SOUTH_UP_DOWN -> Shapes.create(0.125, 0.0, 0.75, 0.875, 1.0, 1.0); - case INSULATORS_WEST_UP_DOWN, FLOATING_WEST_UP_DOWN -> Shapes.create(0.0, 0.0, 0.125, 0.25, 1.0, 0.875); + case INSULATORS_NORTH_UP_DOWN -> Shapes.create(0.125, 0.0, 0.0, 0.875, 1.0, 0.25); + case INSULATORS_EAST_UP_DOWN -> Shapes.create(0.75, 0.0, 0.125, 1.0, 1.0, 0.875); + case INSULATORS_SOUTH_UP_DOWN -> Shapes.create(0.125, 0.0, 0.75, 0.875, 1.0, 1.0); + case INSULATORS_WEST_UP_DOWN -> Shapes.create(0.0, 0.0, 0.125, 0.25, 1.0, 0.875); - case INSULATORS_NORTH_EAST_WEST, FLOATING_NORTH_EAST_WEST -> Shapes.create(0.0, 0.125, 0.0, 1.0, 0.875, 0.25); - case INSULATORS_SOUTH_EAST_WEST, FLOATING_SOUTH_EAST_WEST -> Shapes.create(0.0, 0.125, 0.75, 1.0, 0.875, 1.0); - case INSULATORS_EAST_NORTH_SOUTH, FLOATING_EAST_NORTH_SOUTH -> Shapes.create(0.75, 0.125, 0.0, 1.0, 0.875, 1.0); - case INSULATORS_WEST_NORTH_SOUTH, FLOATING_WEST_NORTH_SOUTH -> Shapes.create(0.0, 0.125, 0.0, 0.25, 0.875, 1.0); + case INSULATORS_NORTH_EAST_WEST -> Shapes.create(0.0, 0.125, 0.0, 1.0, 0.875, 0.25); + case INSULATORS_SOUTH_EAST_WEST -> Shapes.create(0.0, 0.125, 0.75, 1.0, 0.875, 1.0); + case INSULATORS_EAST_NORTH_SOUTH -> Shapes.create(0.75, 0.125, 0.0, 1.0, 0.875, 1.0); + case INSULATORS_WEST_NORTH_SOUTH -> Shapes.create(0.0, 0.125, 0.0, 0.25, 0.875, 1.0); case EDGE_INSIDE_DOWN_NORTH_UP_SOUTH -> Shapes.or(Shapes.create(0.125, 0.0, 0.0, 0.875, 0.25, 1.0), Shapes.create(0.125, 0.0, 0.0, 0.875, 1.0, 0.25)).optimize(); case EDGE_INSIDE_DOWN_SOUTH_UP_NORTH -> Shapes.or(Shapes.create(0.125, 0.0, 0.0, 0.875, 0.25, 1.0), Shapes.create(0.125, 0.0, 0.75, 0.875, 1.0, 1.0)).optimize(); @@ -207,7 +258,10 @@ private static Map makeShapeCache(){ case BEND_UP_SOUTH_WEST -> Shapes.create(0.0, 0.75, 0.125, 0.875, 1.0, 1.0); case BEND_UP_WEST_NORTH -> Shapes.create(0.0, 0.75, 0.0, 0.875, 1.0, 0.875); - // TODO Missing wall bends + case BEND_NORTH_DOWN_EAST, BEND_EAST_DOWN_SOUTH, BEND_SOUTH_DOWN_WEST, BEND_WEST_DOWN_NORTH -> Shapes.create(0.0, 0.125, 0.0, 0.875, 1.0, 0.25); + case BEND_NORTH_EAST_UP, BEND_EAST_SOUTH_UP, BEND_SOUTH_WEST_UP, BEND_WEST_NORTH_UP -> Shapes.create(0.75, 0.125, 0.0, 1.0, 1.0, 0.875); + case BEND_NORTH_UP_WEST, BEND_EAST_UP_NORTH, BEND_SOUTH_UP_EAST, BEND_WEST_UP_SOUTH -> Shapes.create(0.125, 0.125, 0.75, 1.0, 1.0, 1.0); + case BEND_NORTH_WEST_DOWN, BEND_EAST_NORTH_DOWN, BEND_SOUTH_EAST_DOWN, BEND_WEST_SOUTH_DOWN -> Shapes.create(0.0, 0.125, 0.125, 0.25, 1.0, 1.0); case EDGE_OUTSIDE_DOWN_NORTH_UP_SOUTH -> Shapes.create(0.125, 0.0, 0.75, 0.875, 0.25, 1.0); case EDGE_OUTSIDE_DOWN_EAST_UP_WEST -> Shapes.create(0.0, 0.0, 0.125, 0.25, 0.25, 0.875); @@ -223,12 +277,12 @@ private static Map makeShapeCache(){ }; // @formatter:on - if(vShape == null){ - OverEngineered.log.info("Missing voxelshape for shape \"" + shape + "\""); + if(vShape != null){ + map.put(shape, vShape); + }else{ + OverEngineered.log.info("Missing voxelshape for shape \"" + shape.toString().toLowerCase() + "\""); continue; } - - map.put(shape, vShape); } return map; diff --git a/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarCon.java b/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarCon.java new file mode 100644 index 0000000..bdad03d --- /dev/null +++ b/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarCon.java @@ -0,0 +1,326 @@ +package twistedgate.overengineered.common.blocks.busbar; + +import java.util.ArrayList; +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; +import twistedgate.overengineered.OverEngineered; +import twistedgate.overengineered.utils.enums.EnumBusbarShape; + +public class BusbarCon{ + + /** + * This, if not empty, shows that there is still a free spot to connect to + */ + final List freePoints = new ArrayList<>(); + final Level level; + final BlockPos pos; + final Direction facing; + EnumBusbarShape shape; + BlockState state; + + public BusbarCon(Level level, BlockPos pos, BlockState state){ + this.level = level; + this.pos = pos; + this.state = state; + this.shape = state.getValue(BusbarBlock.SHAPE); + this.facing = this.shape.facing; + + updateConnections(this.shape); + } + + public List getConnections(){ + return this.freePoints; + } + + public EnumBusbarShape getShape(){ + return this.shape; + } + + public BlockState getState(){ + removeExistingConnections(); + + BlockState ret = this.state; + // Not sure if somethings gonna go between this yet + return ret; + } + + @SuppressWarnings("unused") + public void onPlace(boolean placing){ + // @formatter:off + final BlockPos posDown = this.pos.relative(Direction.DOWN); + final BlockPos posUp = this.pos.relative(Direction.UP); + final BlockPos posNorth = this.pos.relative(Direction.NORTH); + final BlockPos posEast = this.pos.relative(Direction.EAST); + final BlockPos posSouth = this.pos.relative(Direction.SOUTH); + final BlockPos posWest = this.pos.relative(Direction.WEST); + + final boolean hasDown = this.hasNeigborBus(posDown); + final boolean hasUp = this.hasNeigborBus(posUp); + final boolean hasNorth = this.hasNeigborBus(posNorth); + final boolean hasSouth = this.hasNeigborBus(posSouth); + final boolean hasEast = this.hasNeigborBus(posEast); + final boolean hasWest = this.hasNeigborBus(posWest); + + final boolean _UpOrDown = hasUp || hasDown; + final boolean _NorthOrSouth = hasNorth || hasSouth; + final boolean _EastOrWest = hasEast || hasWest; + + final boolean _NorthAndEast = hasNorth && hasEast; + final boolean _NorthAndWest = hasNorth && hasWest; + final boolean _SouthAndEast = hasSouth && hasEast; + final boolean _SouthAndWest = hasSouth && hasWest; + + OverEngineered.log.info(String.format(""" + onPlace([%d, %d, %d]) + down: %s, + up: %s, + north: %s, + south: %s, + east: %s, + west: %s""", this.pos.getX(), this.pos.getY(), this.pos.getZ(), + hasDown, hasUp, hasNorth, hasSouth, hasEast, hasWest)); + // @formatter:on + + EnumBusbarShape newShape = null; + + switch(this.facing){ + case UP:{ + break; + } + case DOWN:{ + if(_NorthOrSouth && !_EastOrWest){ + newShape = EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH; + } + if(_EastOrWest && !_NorthOrSouth){ + newShape = EnumBusbarShape.INSULATORS_DOWN_EAST_WEST; + } + + if(_NorthAndWest && !_SouthAndEast){ + newShape = EnumBusbarShape.BEND_DOWN_WEST_NORTH; + } + if(_NorthAndEast && !_SouthAndWest){ + newShape = EnumBusbarShape.BEND_DOWN_NORTH_EAST; + } + + if(_SouthAndEast && !_NorthAndWest){ + newShape = EnumBusbarShape.BEND_DOWN_EAST_SOUTH; + } + if(_SouthAndWest && !_NorthAndEast){ + newShape = EnumBusbarShape.BEND_DOWN_SOUTH_WEST; + } + break; + } + case NORTH:{ + break; + } + case EAST:{ + break; + } + case SOUTH:{ + break; + } + case WEST:{ + break; + } + default: + break; + } + + // TODO ??? + + if(newShape != null) + this.shape = newShape; + + // TODO ??? + updateConnections(this.shape); + this.state = this.state.setValue(BusbarBlock.SHAPE, this.shape); + if(placing || this.level.getBlockState(this.pos) != this.state){ + this.level.setBlock(this.pos, this.state, 3); + + for(BlockPos cPos:this.freePoints){ + BusbarCon bus = getBus(cPos); + + if(bus != null){ + bus.removeExistingConnections(); + + if(bus.canConnectTo(this)){ + bus.connectTo(this); + } + } + } + } + } + + public void connectTo(BusbarCon other){ + this.freePoints.add(other.pos); + + // @formatter:off + final BlockPos posDown = this.pos.relative(Direction.DOWN); + final BlockPos posUp = this.pos.relative(Direction.UP); + final BlockPos posNorth = this.pos.relative(Direction.NORTH); + final BlockPos posEast = this.pos.relative(Direction.EAST); + final BlockPos posSouth = this.pos.relative(Direction.SOUTH); + final BlockPos posWest = this.pos.relative(Direction.WEST); + + final boolean hasDown = this.hasConnection(posDown); + final boolean hasUp = this.hasConnection(posUp); + final boolean hasNorth = this.hasConnection(posNorth); + final boolean hasEast = this.hasConnection(posEast); + final boolean hasSouth = this.hasConnection(posSouth); + final boolean hasWest = this.hasConnection(posWest); + // @formatter:on + + OverEngineered.log.info(String.format(""" + [%d, %d, %d].connectTo([%d, %d, %d]) + down: %s, + up: %s, + north: %s, + south: %s, + east: %s, + west: %s""", this.pos.getX(), this.pos.getY(), this.pos.getZ(), + other.pos.getX(), other.pos.getY(), other.pos.getZ(), + hasDown, hasUp, hasNorth, hasSouth, hasEast, hasWest)); + + EnumBusbarShape shape = null; + + switch(this.facing){ + case UP:{ + break; + } + case DOWN:{ + if(hasNorth || hasSouth){ + shape = EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH; + } + if(hasEast || hasWest){ + shape = EnumBusbarShape.INSULATORS_DOWN_EAST_WEST; + } + + if(hasSouth && hasEast && !hasNorth && !hasWest){ + shape = EnumBusbarShape.BEND_DOWN_EAST_SOUTH; + } + if(hasSouth && hasWest && !hasNorth && !hasEast){ + shape = EnumBusbarShape.BEND_DOWN_SOUTH_WEST; + } + if(hasNorth && hasWest && !hasSouth && !hasEast){ + shape = EnumBusbarShape.BEND_DOWN_WEST_NORTH; + } + if(hasNorth && hasEast && !hasSouth && !hasWest){ + shape = EnumBusbarShape.BEND_DOWN_NORTH_EAST; + } + break; + } + case NORTH:{ + break; + } + case EAST:{ + break; + } + case SOUTH:{ + break; + } + case WEST:{ + break; + } + default: + break; + } + + //OverEngineered.log.info("Selecting: {}", shape != null ? shape.getSerializedName() : "Default"); + + if(shape == null){ + shape = EnumBusbarShape.INSULATORS_DOWN_NORTH_SOUTH; + } + + this.state = this.state.setValue(BusbarBlock.SHAPE, shape); + this.level.setBlock(this.pos, this.state, 3); + } + + public BusbarCon printDebugInfo(){ + OverEngineered.log.info(toString()); + return this; + } + + public boolean hasOpenConnection(){ + return !this.freePoints.isEmpty(); + } + + public boolean canConnectTo(BusbarCon bus){ + return connectsTo(bus) || hasOpenConnection(); + } + + @Nullable + public BusbarCon getBus(BlockPos pos){ + BlockState state = this.level.getBlockState(pos); + return create(this.level, pos, state); + } + + @Nullable + public static BusbarCon create(Level level, BlockPos pos, BlockState state){ + return BusbarBlock.isBusbar(state) ? new BusbarCon(level, pos, state) : null; + } + + public void updateConnections(EnumBusbarShape shape){ + this.freePoints.clear(); + shape.connectionOffsets(this.freePoints, this.pos); + } + + /** + *
+	 * This has to be called after instantiating.
+	 * 
+ * + * Remove connections that already exist between this and another buses.
+ */ + public BusbarCon removeExistingConnections(){ + // This caues massive recursion when called inside the constructor, so has to be called seperately! + for(int i = 0;i < this.freePoints.size();i++){ + BusbarCon bus = getBus(this.freePoints.get(i)); + if(bus != null && bus.connectsTo(this)){ + this.freePoints.set(i, bus.pos); + }else{ + this.freePoints.remove(i--); + } + } + return this; + } + + public boolean connectsTo(BusbarCon bus){ + return hasConnection(bus.pos); + } + + public boolean hasConnection(BlockPos pos){ + for(int i = 0;i < this.freePoints.size();i++){ + BlockPos p = this.freePoints.get(i); + if(p.equals(pos)){ + return true; + } + } + return false; + } + + public boolean hasNeigborBus(BlockPos pos){ + BusbarCon bus = getBus(pos); + if(bus == null) + return false; + + bus.removeExistingConnections(); + return bus.canConnectTo(this); + } + + @Override + public String toString(){ + return String.format(""" + BusbarCon(){ + Level: %s + Pos: %s + State: %s + Connections: %s + }""", this.level, this.pos, this.state, this.freePoints); + } +} diff --git a/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarState.java b/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarState.java index 9a73b3d..c8a6d40 100644 --- a/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarState.java +++ b/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarState.java @@ -10,6 +10,11 @@ import net.minecraft.world.level.block.state.BlockState; import twistedgate.overengineered.utils.enums.EnumBusbarShape; +/** + * Old broken attempt + * + * @author TwistedGate + */ public class BusbarState{ private final List connections = new ArrayList<>(); private final Level level; @@ -224,11 +229,11 @@ private void connectTo(BusbarState state){ private void removeSoftConnections(){ for(int i = 0;i < this.connections.size();i++){ - BusbarState busState = getBus(this.connections.get(i)); - if(busState != null && busState.connectsTo(this)){ - this.connections.set(i, busState.pos); - }else{ + BusbarState bus = getBus(this.connections.get(i)); + if(bus != null && bus.connectsTo(this)){ this.connections.remove(i--); + }else{ + this.connections.set(i, bus.pos); } } } diff --git a/src/main/java/twistedgate/overengineered/utils/enums/EnumBusbarShape.java b/src/main/java/twistedgate/overengineered/utils/enums/EnumBusbarShape.java index 119ffa3..73e23f7 100644 --- a/src/main/java/twistedgate/overengineered/utils/enums/EnumBusbarShape.java +++ b/src/main/java/twistedgate/overengineered/utils/enums/EnumBusbarShape.java @@ -21,101 +21,90 @@ public enum EnumBusbarShape implements StringRepresentable{ // @formatter:off // Straights with Insulators (FACING_FROM_TO) - INSULATORS_DOWN_NORTH_SOUTH(ConnectionsPoints.NORTH_SOUTH), - INSULATORS_DOWN_EAST_WEST(ConnectionsPoints.EAST_WEST), - INSULATORS_UP_NORTH_SOUTH(ConnectionsPoints.NORTH_SOUTH), - INSULATORS_UP_EAST_WEST(ConnectionsPoints.EAST_WEST), + INSULATORS_DOWN_NORTH_SOUTH(Direction.DOWN, Connections.NORTH_SOUTH), + INSULATORS_DOWN_EAST_WEST(Direction.DOWN, Connections.EAST_WEST), + INSULATORS_UP_NORTH_SOUTH(Direction.UP, Connections.NORTH_SOUTH), + INSULATORS_UP_EAST_WEST(Direction.UP, Connections.EAST_WEST), - INSULATORS_NORTH_UP_DOWN(ConnectionsPoints.UP_DOWN), - INSULATORS_EAST_UP_DOWN(ConnectionsPoints.UP_DOWN), - INSULATORS_SOUTH_UP_DOWN(ConnectionsPoints.UP_DOWN), - INSULATORS_WEST_UP_DOWN(ConnectionsPoints.UP_DOWN), - INSULATORS_NORTH_EAST_WEST(ConnectionsPoints.EAST_WEST), - INSULATORS_EAST_NORTH_SOUTH(ConnectionsPoints.NORTH_SOUTH), - INSULATORS_SOUTH_EAST_WEST(ConnectionsPoints.EAST_WEST), - INSULATORS_WEST_NORTH_SOUTH(ConnectionsPoints.NORTH_SOUTH), - - // Straights without Insulators (FACING_FROM_TO) - FLOATING_DOWN_NORTH_SOUTH(ConnectionsPoints.NORTH_SOUTH), - FLOATING_DOWN_EAST_WEST(ConnectionsPoints.EAST_WEST), - FLOATING_UP_NORTH_SOUTH(ConnectionsPoints.NORTH_SOUTH), - FLOATING_UP_EAST_WEST(ConnectionsPoints.EAST_WEST), - - FLOATING_NORTH_UP_DOWN(ConnectionsPoints.UP_DOWN), - FLOATING_EAST_UP_DOWN(ConnectionsPoints.UP_DOWN), - FLOATING_SOUTH_UP_DOWN(ConnectionsPoints.UP_DOWN), - FLOATING_WEST_UP_DOWN(ConnectionsPoints.UP_DOWN), - FLOATING_NORTH_EAST_WEST(ConnectionsPoints.EAST_WEST), - FLOATING_EAST_NORTH_SOUTH(ConnectionsPoints.NORTH_SOUTH), - FLOATING_SOUTH_EAST_WEST(ConnectionsPoints.EAST_WEST), - FLOATING_WEST_NORTH_SOUTH(ConnectionsPoints.NORTH_SOUTH), + INSULATORS_NORTH_UP_DOWN(Direction.NORTH, Connections.UP_DOWN), + INSULATORS_EAST_UP_DOWN(Direction.EAST, Connections.UP_DOWN), + INSULATORS_SOUTH_UP_DOWN(Direction.SOUTH, Connections.UP_DOWN), + INSULATORS_WEST_UP_DOWN(Direction.WEST, Connections.UP_DOWN), + INSULATORS_NORTH_EAST_WEST(Direction.NORTH, Connections.EAST_WEST), + INSULATORS_EAST_NORTH_SOUTH(Direction.EAST, Connections.NORTH_SOUTH), + INSULATORS_SOUTH_EAST_WEST(Direction.SOUTH, Connections.EAST_WEST), + INSULATORS_WEST_NORTH_SOUTH(Direction.WEST, Connections.NORTH_SOUTH), // 90° Bends (FACING_FROM_TO) - BEND_DOWN_NORTH_EAST(ConnectionsPoints.NORTH_EAST), - BEND_DOWN_EAST_SOUTH(ConnectionsPoints.EAST_SOUTH), - BEND_DOWN_SOUTH_WEST(ConnectionsPoints.SOUTH_WEST), - BEND_DOWN_WEST_NORTH(ConnectionsPoints.WEST_NORTH), + BEND_DOWN_NORTH_EAST(Direction.DOWN, Connections.NORTH_EAST), + BEND_DOWN_EAST_SOUTH(Direction.DOWN, Connections.EAST_SOUTH), + BEND_DOWN_SOUTH_WEST(Direction.DOWN, Connections.SOUTH_WEST), + BEND_DOWN_WEST_NORTH(Direction.DOWN, Connections.WEST_NORTH), - BEND_UP_NORTH_EAST(ConnectionsPoints.NORTH_EAST), - BEND_UP_EAST_SOUTH(ConnectionsPoints.EAST_SOUTH), - BEND_UP_SOUTH_WEST(ConnectionsPoints.SOUTH_WEST), - BEND_UP_WEST_NORTH(ConnectionsPoints.WEST_NORTH), + BEND_UP_NORTH_EAST(Direction.UP, Connections.NORTH_EAST), + BEND_UP_EAST_SOUTH(Direction.UP, Connections.EAST_SOUTH), + BEND_UP_SOUTH_WEST(Direction.UP, Connections.SOUTH_WEST), + BEND_UP_WEST_NORTH(Direction.UP, Connections.WEST_NORTH), - BEND_NORTH_DOWN_EAST(ConnectionsPoints.DOWN_EAST), - BEND_NORTH_EAST_UP(ConnectionsPoints.UP_EAST), - BEND_NORTH_UP_WEST(ConnectionsPoints.UP_WEST), - BEND_NORTH_WEST_DOWN(ConnectionsPoints.DOWN_WEST), + BEND_NORTH_DOWN_EAST(Direction.NORTH, Connections.DOWN_EAST), + BEND_NORTH_EAST_UP(Direction.NORTH, Connections.UP_EAST), + BEND_NORTH_UP_WEST(Direction.NORTH, Connections.UP_WEST), + BEND_NORTH_WEST_DOWN(Direction.NORTH, Connections.DOWN_WEST), - BEND_EAST_DOWN_SOUTH(ConnectionsPoints.DOWN_SOUTH), - BEND_EAST_SOUTH_UP(ConnectionsPoints.UP_SOUTH), - BEND_EAST_UP_NORTH(ConnectionsPoints.UP_NORTH), - BEND_EAST_NORTH_DOWN(ConnectionsPoints.DOWN_NORTH), + BEND_EAST_DOWN_SOUTH(Direction.EAST, Connections.DOWN_SOUTH), + BEND_EAST_SOUTH_UP(Direction.EAST, Connections.UP_SOUTH), + BEND_EAST_UP_NORTH(Direction.EAST, Connections.UP_NORTH), + BEND_EAST_NORTH_DOWN(Direction.EAST, Connections.DOWN_NORTH), - BEND_SOUTH_DOWN_WEST(ConnectionsPoints.DOWN_WEST), - BEND_SOUTH_WEST_UP(ConnectionsPoints.UP_WEST), - BEND_SOUTH_UP_EAST(ConnectionsPoints.UP_EAST), - BEND_SOUTH_EAST_DOWN(ConnectionsPoints.DOWN_EAST), + BEND_SOUTH_DOWN_WEST(Direction.SOUTH, Connections.DOWN_WEST), + BEND_SOUTH_WEST_UP(Direction.SOUTH, Connections.UP_WEST), + BEND_SOUTH_UP_EAST(Direction.SOUTH, Connections.UP_EAST), + BEND_SOUTH_EAST_DOWN(Direction.SOUTH, Connections.DOWN_EAST), - BEND_WEST_DOWN_NORTH(ConnectionsPoints.DOWN_NORTH), - BEND_WEST_NORTH_UP(ConnectionsPoints.UP_NORTH), - BEND_WEST_UP_SOUTH(ConnectionsPoints.UP_SOUTH), - BEND_WEST_SOUTH_DOWN(ConnectionsPoints.DOWN_SOUTH), + BEND_WEST_DOWN_NORTH(Direction.WEST, Connections.DOWN_NORTH), + BEND_WEST_NORTH_UP(Direction.WEST, Connections.UP_NORTH), + BEND_WEST_UP_SOUTH(Direction.WEST, Connections.UP_SOUTH), + BEND_WEST_SOUTH_DOWN(Direction.WEST, Connections.DOWN_SOUTH), - // Inside Edges (SIDE_FACING_FROM_TO) - EDGE_INSIDE_DOWN_NORTH_UP_SOUTH(ConnectionsPoints.UP_SOUTH), - EDGE_INSIDE_DOWN_EAST_UP_WEST(ConnectionsPoints.UP_WEST), - EDGE_INSIDE_DOWN_SOUTH_UP_NORTH(ConnectionsPoints.UP_NORTH), - EDGE_INSIDE_DOWN_WEST_UP_EAST(ConnectionsPoints.UP_EAST), - EDGE_INSIDE_UP_NORTH_DOWN_SOUTH(ConnectionsPoints.DOWN_SOUTH), - EDGE_INSIDE_UP_EAST_DOWN_WEST(ConnectionsPoints.DOWN_WEST), - EDGE_INSIDE_UP_SOUTH_DOWN_NORTH(ConnectionsPoints.DOWN_NORTH), - EDGE_INSIDE_UP_WEST_DOWN_EAST(ConnectionsPoints.DOWN_EAST), + // Inside Edges (FACING_SIDE_FROM_TO) + EDGE_INSIDE_DOWN_NORTH_UP_SOUTH (Direction.DOWN, Connections.UP_SOUTH), + EDGE_INSIDE_DOWN_EAST_UP_WEST (Direction.DOWN, Connections.UP_WEST), + EDGE_INSIDE_DOWN_SOUTH_UP_NORTH (Direction.DOWN, Connections.UP_NORTH), + EDGE_INSIDE_DOWN_WEST_UP_EAST (Direction.DOWN, Connections.UP_EAST), + EDGE_INSIDE_UP_NORTH_DOWN_SOUTH (Direction.UP, Connections.DOWN_SOUTH), + EDGE_INSIDE_UP_EAST_DOWN_WEST (Direction.UP, Connections.DOWN_WEST), + EDGE_INSIDE_UP_SOUTH_DOWN_NORTH (Direction.UP, Connections.DOWN_NORTH), + EDGE_INSIDE_UP_WEST_DOWN_EAST (Direction.UP, Connections.DOWN_EAST), - // Outside Edges (SIDE_FACING_FROM_TO) - EDGE_OUTSIDE_DOWN_NORTH_UP_SOUTH(ConnectionsPoints.UP_SOUTH), - EDGE_OUTSIDE_DOWN_EAST_UP_WEST(ConnectionsPoints.UP_WEST), - EDGE_OUTSIDE_DOWN_SOUTH_UP_NORTH(ConnectionsPoints.UP_NORTH), - EDGE_OUTSIDE_DOWN_WEST_UP_EAST(ConnectionsPoints.UP_EAST), - EDGE_OUTSIDE_UP_NORTH_DOWN_SOUTH(ConnectionsPoints.DOWN_SOUTH), - EDGE_OUTSIDE_UP_EAST_DOWN_WEST(ConnectionsPoints.DOWN_WEST), - EDGE_OUTSIDE_UP_SOUTH_DOWN_NORTH(ConnectionsPoints.DOWN_NORTH), - EDGE_OUTSIDE_UP_WEST_DOWN_EAST(ConnectionsPoints.DOWN_EAST), + // Outside Edges (FACING_SIDE_FROM_TO) + EDGE_OUTSIDE_DOWN_NORTH_UP_SOUTH(Direction.DOWN, Connections.UP_SOUTH), + EDGE_OUTSIDE_DOWN_EAST_UP_WEST (Direction.DOWN, Connections.UP_WEST), + EDGE_OUTSIDE_DOWN_SOUTH_UP_NORTH(Direction.DOWN, Connections.UP_NORTH), + EDGE_OUTSIDE_DOWN_WEST_UP_EAST (Direction.DOWN, Connections.UP_EAST), + EDGE_OUTSIDE_UP_NORTH_DOWN_SOUTH(Direction.UP, Connections.DOWN_SOUTH), + EDGE_OUTSIDE_UP_EAST_DOWN_WEST (Direction.UP, Connections.DOWN_WEST), + EDGE_OUTSIDE_UP_SOUTH_DOWN_NORTH(Direction.UP, Connections.DOWN_NORTH), + EDGE_OUTSIDE_UP_WEST_DOWN_EAST (Direction.UP, Connections.DOWN_EAST), ; // @formatter:on private final String serialname; - private final Direction[] points; - private EnumBusbarShape(Direction... points){ + public final Direction facing; + public final Connections connections; + private EnumBusbarShape(Direction facing, Connections cons){ this.serialname = name().toLowerCase(); - this.points = points; + this.facing = facing; + this.connections = cons; } - private EnumBusbarShape(String name, Direction... points){ + + private EnumBusbarShape(String name, Direction facing, Connections cons){ this.serialname = name; - this.points = points; + this.facing = facing; + this.connections = cons; } public void connectionOffsets(final List list, BlockPos pos){ - for(Direction p:this.points){ + for(Direction p:this.connections.points){ list.add(pos.relative(p)); } } @@ -125,25 +114,39 @@ public String getSerializedName(){ return this.serialname; } - public static class ConnectionsPoints{ - private static final Direction[] NORTH_SOUTH = {Direction.NORTH, Direction.SOUTH}; - private static final Direction[] EAST_WEST = {Direction.EAST, Direction.WEST}; - private static final Direction[] UP_DOWN = {Direction.UP, Direction.DOWN}; + public boolean compatibleWith(EnumBusbarShape other){ + return this.connections.compatibleWith(other.connections); + } + + public static enum Connections{ + NORTH_SOUTH(Direction.NORTH, Direction.SOUTH), + EAST_WEST(Direction.EAST, Direction.WEST), + UP_DOWN(Direction.UP, Direction.DOWN), + + NORTH_EAST(Direction.NORTH, Direction.EAST), + EAST_SOUTH(Direction.EAST, Direction.SOUTH), + SOUTH_WEST(Direction.SOUTH, Direction.WEST), + WEST_NORTH(Direction.WEST, Direction.NORTH), + + UP_NORTH(Direction.UP, Direction.NORTH), + UP_EAST(Direction.UP, Direction.EAST), + UP_SOUTH(Direction.UP, Direction.SOUTH), + UP_WEST(Direction.UP, Direction.WEST), - private static final Direction[] NORTH_EAST = {Direction.NORTH, Direction.EAST}; - private static final Direction[] EAST_SOUTH = {Direction.EAST, Direction.SOUTH}; - private static final Direction[] SOUTH_WEST = {Direction.SOUTH, Direction.WEST}; - private static final Direction[] WEST_NORTH = {Direction.WEST, Direction.NORTH}; + DOWN_NORTH(Direction.DOWN, Direction.NORTH), + DOWN_EAST(Direction.DOWN, Direction.EAST), + DOWN_SOUTH(Direction.DOWN, Direction.SOUTH), + DOWN_WEST(Direction.DOWN, Direction.WEST) + ; - private static final Direction[] UP_NORTH = {Direction.UP, Direction.NORTH}; - private static final Direction[] UP_EAST = {Direction.UP, Direction.EAST}; - private static final Direction[] UP_SOUTH = {Direction.UP, Direction.SOUTH}; - private static final Direction[] UP_WEST = {Direction.UP, Direction.WEST}; + final Direction[] points; + private Connections(Direction... points){ + this.points = points; + } - private static final Direction[] DOWN_NORTH = {Direction.DOWN, Direction.NORTH}; - private static final Direction[] DOWN_EAST = {Direction.DOWN, Direction.EAST}; - private static final Direction[] DOWN_SOUTH = {Direction.DOWN, Direction.SOUTH}; - private static final Direction[] DOWN_WEST = {Direction.DOWN, Direction.WEST}; + public boolean compatibleWith(Connections other){ + return this.points[0] == other.points[1] || this.points[1] == other.points[0]; + } } public static enum Type implements Iterable{ @@ -163,21 +166,6 @@ public static enum Type implements Iterable{ INSULATORS_WEST_NORTH_SOUTH ), - STRAIGHT_FLOATING_FLOOR(FLOATING_DOWN_NORTH_SOUTH, FLOATING_DOWN_EAST_WEST), - STRAIGHT_FLOATING_CEILING(FLOATING_UP_NORTH_SOUTH, FLOATING_UP_EAST_WEST), - STRAIGHT_FLOATING_WALL_NORMAL( - FLOATING_NORTH_UP_DOWN, - FLOATING_EAST_UP_DOWN, - FLOATING_SOUTH_UP_DOWN, - FLOATING_WEST_UP_DOWN - ), - STRAIGHT_FLOATING_WALL_ROTATED( - FLOATING_NORTH_EAST_WEST, - FLOATING_EAST_NORTH_SOUTH, - FLOATING_SOUTH_EAST_WEST, - FLOATING_WEST_NORTH_SOUTH - ), - BENDS_FLOOR( BEND_DOWN_NORTH_EAST, BEND_DOWN_EAST_SOUTH, @@ -239,11 +227,6 @@ public static enum Type implements Iterable{ list.addAll(Arrays.asList(STRAIGHT_INSULATORS_WALL_NORMAL.shapes)); list.addAll(Arrays.asList(STRAIGHT_INSULATORS_WALL_ROTATED.shapes)); - list.addAll(Arrays.asList(STRAIGHT_FLOATING_FLOOR.shapes)); - list.addAll(Arrays.asList(STRAIGHT_FLOATING_CEILING.shapes)); - list.addAll(Arrays.asList(STRAIGHT_FLOATING_WALL_NORMAL.shapes)); - list.addAll(Arrays.asList(STRAIGHT_FLOATING_WALL_ROTATED.shapes)); - STRAIGHT_SEGMENTS = Collections.unmodifiableSet(list); } { From d069a6fa668eed05e3e20c0b8c01d497a0c96115 Mon Sep 17 00:00:00 2001 From: TwistedGate <31029668+TwistedGate@users.noreply.github.com> Date: Sun, 10 Dec 2023 08:03:11 +0100 Subject: [PATCH 19/26] Bump Forge to `40.2.4` --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index bec354f..4a46ae5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ org.gradle.jvmargs=-Xmx3G org.gradle.daemon=false version_minecraft=1.18.2 -version_forge=40.1.48 +version_forge=40.2.4 version_fml_mappings=1.18.2 version_parchment=1.18.1-2022.03.06-1.18.2 version_ie=1.18.2-8.4.0-161 From f481c91b0a235a0840fddf882eaafe27efac12f1 Mon Sep 17 00:00:00 2001 From: TwistedGate <31029668+TwistedGate@users.noreply.github.com> Date: Sun, 10 Dec 2023 08:20:59 +0100 Subject: [PATCH 20/26] Remove redundant TE-Base --- .../blocks/tileentity/BasicTileEntity.java | 63 ------------------- .../blocks/tileentity/OETileEntityBase.java | 1 + 2 files changed, 1 insertion(+), 63 deletions(-) delete mode 100644 src/main/java/twistedgate/overengineered/common/blocks/tileentity/BasicTileEntity.java diff --git a/src/main/java/twistedgate/overengineered/common/blocks/tileentity/BasicTileEntity.java b/src/main/java/twistedgate/overengineered/common/blocks/tileentity/BasicTileEntity.java deleted file mode 100644 index bf93561..0000000 --- a/src/main/java/twistedgate/overengineered/common/blocks/tileentity/BasicTileEntity.java +++ /dev/null @@ -1,63 +0,0 @@ -package twistedgate.overengineered.common.blocks.tileentity; - -import java.util.Objects; - -import javax.annotation.Nonnull; - -import net.minecraft.core.BlockPos; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.network.Connection; -import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.entity.BlockEntityType; -import net.minecraft.world.level.block.state.BlockState; - -public abstract class BasicTileEntity extends BlockEntity{ - public BasicTileEntity(BlockEntityType pType, BlockPos pWorldPosition, BlockState pBlockState){ - super(pType, pWorldPosition, pBlockState); - } - - @Nonnull - public Level getWorldNonnull(){ - return Objects.requireNonNull(super.getLevel()); - } - - @Override - public ClientboundBlockEntityDataPacket getUpdatePacket(){ - return ClientboundBlockEntityDataPacket.create(this, BlockEntity::getUpdateTag); - } - - @Override - public void handleUpdateTag(CompoundTag tag){ - load(tag); - } - - @Override - public CompoundTag getUpdateTag(){ - CompoundTag nbt = new CompoundTag(); - saveAdditional(nbt); - return nbt; - } - - @Override - public void onDataPacket(Connection net, ClientboundBlockEntityDataPacket pkt){ - load(pkt.getTag()); - } - - @Override - public void saveAdditional(CompoundTag compound){ - super.saveAdditional(compound); - writeCustom(compound); - } - - @Override - public void load(CompoundTag compound){ - super.load(compound); - readCustom(compound); - } - - protected abstract CompoundTag writeCustom(CompoundTag compound); - - protected abstract void readCustom(CompoundTag compound); -} diff --git a/src/main/java/twistedgate/overengineered/common/blocks/tileentity/OETileEntityBase.java b/src/main/java/twistedgate/overengineered/common/blocks/tileentity/OETileEntityBase.java index ba87a05..ac69a3c 100644 --- a/src/main/java/twistedgate/overengineered/common/blocks/tileentity/OETileEntityBase.java +++ b/src/main/java/twistedgate/overengineered/common/blocks/tileentity/OETileEntityBase.java @@ -49,6 +49,7 @@ public void onDataPacket(Connection net, ClientboundBlockEntityDataPacket pkt){ @Override public void saveAdditional(@Nonnull CompoundTag compound){ + super.saveAdditional(compound); writeCustom(compound); } From 92eb39eab3e8f3eefd57c13f11ee6f195fe14b49 Mon Sep 17 00:00:00 2001 From: TwistedGate <31029668+TwistedGate@users.noreply.github.com> Date: Sun, 10 Dec 2023 08:33:43 +0100 Subject: [PATCH 21/26] Always use latest of JEI `9.7.1` --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 4a46ae5..44a12ec 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,5 +7,5 @@ version_fml_mappings=1.18.2 version_parchment=1.18.1-2022.03.06-1.18.2 version_ie=1.18.2-8.4.0-161 -version_jei=9.7.0.195 +version_jei=9.7.1.+ version_ct=9.1.156 \ No newline at end of file From 916b3429858e7fa3b7c9b0fc7043f9f13e92d598 Mon Sep 17 00:00:00 2001 From: TwistedGate <31029668+TwistedGate@users.noreply.github.com> Date: Mon, 25 Dec 2023 16:43:28 +0100 Subject: [PATCH 22/26] Switching to BlockEntityRenderer The default way is fine but its very limiting, this gives me more freedom. --- .../common/data/OEBlockStates.java | 38 ++- .../common/data/OEItemModels.java | 8 +- src/generated/resources/.cache/cache | 10 +- .../overengineered/blockstates/busbar.json | 180 +++-------- .../models/block/busbar_bend.json | 9 - .../models/block/busbar_horizontal_down.json | 9 - .../models/block/busbar_horizontal_up.json | 9 - .../models/block/busbar_with_insulators.json | 9 - .../busbar_with_insulators_pre_y_rotated.json | 9 - .../overengineered/models/block/empty.json | 1 + .../overengineered/models/item/busbar.json | 9 +- .../client/ClientModBusEventHandlers.java | 33 ++ .../client/render/BusbarRenderer.java | 135 ++++++++ .../overengineered/common/OEContent.java | 5 +- .../common/blocks/busbar/BusbarBlock.java | 241 +++++++++++--- .../overengineered/utils/ResourceUtils.java | 5 + .../utils/enums/EnumBusbarShape.java | 301 ++++++++++++++---- .../models/block/busbar/json/busbar_bend.json | 9 + .../block/busbar/json/busbar_edge_inside.json | 9 + .../busbar/json/busbar_edge_outside.json | 9 + .../block/busbar/json/busbar_straight.json | 9 + .../block/busbar/json/busconnector_lv_a.json | 9 + .../block/busbar/json/busconnector_lv_b.json | 9 + .../block/busbar/json/busconnector_lv_c.json | 9 + .../block/busbar/json/busconnector_mv_a.json | 9 + .../block/busbar/json/busconnector_mv_b.json | 9 + .../block/busbar/json/busconnector_mv_c.json | 9 + .../{obj/busbar => busbar/obj}/busbar_a.obj | 0 .../busbar => busbar/obj}/busbar_a_alt.obj | 0 .../{obj/busbar => busbar/obj}/busbar_b.obj | 0 .../busbar => busbar/obj}/busbar_b_alt.obj | 0 .../busbar => busbar/obj}/busbar_bend.obj | 0 .../obj}/busbar_edge_inside.obj | 0 .../obj}/busbar_edge_outside.obj | 0 .../obj}/busconnector_lv_a.obj | 0 .../obj}/busconnector_lv_b.obj | 0 .../obj}/busconnector_lv_c.obj | 0 .../obj}/busconnector_mv_a.obj | 0 .../obj}/busconnector_mv_b.obj | 0 .../obj}/busconnector_mv_c.obj | 0 .../busbar => busbar/obj}/busmaterial.mtl | 0 41 files changed, 784 insertions(+), 317 deletions(-) delete mode 100644 src/generated/resources/assets/overengineered/models/block/busbar_bend.json delete mode 100644 src/generated/resources/assets/overengineered/models/block/busbar_horizontal_down.json delete mode 100644 src/generated/resources/assets/overengineered/models/block/busbar_horizontal_up.json delete mode 100644 src/generated/resources/assets/overengineered/models/block/busbar_with_insulators.json delete mode 100644 src/generated/resources/assets/overengineered/models/block/busbar_with_insulators_pre_y_rotated.json create mode 100644 src/generated/resources/assets/overengineered/models/block/empty.json create mode 100644 src/main/java/twistedgate/overengineered/client/ClientModBusEventHandlers.java create mode 100644 src/main/java/twistedgate/overengineered/client/render/BusbarRenderer.java create mode 100644 src/main/resources/assets/overengineered/models/block/busbar/json/busbar_bend.json create mode 100644 src/main/resources/assets/overengineered/models/block/busbar/json/busbar_edge_inside.json create mode 100644 src/main/resources/assets/overengineered/models/block/busbar/json/busbar_edge_outside.json create mode 100644 src/main/resources/assets/overengineered/models/block/busbar/json/busbar_straight.json create mode 100644 src/main/resources/assets/overengineered/models/block/busbar/json/busconnector_lv_a.json create mode 100644 src/main/resources/assets/overengineered/models/block/busbar/json/busconnector_lv_b.json create mode 100644 src/main/resources/assets/overengineered/models/block/busbar/json/busconnector_lv_c.json create mode 100644 src/main/resources/assets/overengineered/models/block/busbar/json/busconnector_mv_a.json create mode 100644 src/main/resources/assets/overengineered/models/block/busbar/json/busconnector_mv_b.json create mode 100644 src/main/resources/assets/overengineered/models/block/busbar/json/busconnector_mv_c.json rename src/main/resources/assets/overengineered/models/block/{obj/busbar => busbar/obj}/busbar_a.obj (100%) rename src/main/resources/assets/overengineered/models/block/{obj/busbar => busbar/obj}/busbar_a_alt.obj (100%) rename src/main/resources/assets/overengineered/models/block/{obj/busbar => busbar/obj}/busbar_b.obj (100%) rename src/main/resources/assets/overengineered/models/block/{obj/busbar => busbar/obj}/busbar_b_alt.obj (100%) rename src/main/resources/assets/overengineered/models/block/{obj/busbar => busbar/obj}/busbar_bend.obj (100%) rename src/main/resources/assets/overengineered/models/block/{obj/busbar => busbar/obj}/busbar_edge_inside.obj (100%) rename src/main/resources/assets/overengineered/models/block/{obj/busbar => busbar/obj}/busbar_edge_outside.obj (100%) rename src/main/resources/assets/overengineered/models/block/{obj/busbar => busbar/obj}/busconnector_lv_a.obj (100%) rename src/main/resources/assets/overengineered/models/block/{obj/busbar => busbar/obj}/busconnector_lv_b.obj (100%) rename src/main/resources/assets/overengineered/models/block/{obj/busbar => busbar/obj}/busconnector_lv_c.obj (100%) rename src/main/resources/assets/overengineered/models/block/{obj/busbar => busbar/obj}/busconnector_mv_a.obj (100%) rename src/main/resources/assets/overengineered/models/block/{obj/busbar => busbar/obj}/busconnector_mv_b.obj (100%) rename src/main/resources/assets/overengineered/models/block/{obj/busbar => busbar/obj}/busconnector_mv_c.obj (100%) rename src/main/resources/assets/overengineered/models/block/{obj/busbar => busbar/obj}/busmaterial.mtl (100%) diff --git a/src/datagen/java/twistedgate/overengineered/common/data/OEBlockStates.java b/src/datagen/java/twistedgate/overengineered/common/data/OEBlockStates.java index cfd9a8a..4c1426c 100644 --- a/src/datagen/java/twistedgate/overengineered/common/data/OEBlockStates.java +++ b/src/datagen/java/twistedgate/overengineered/common/data/OEBlockStates.java @@ -26,19 +26,40 @@ public OEBlockStates(DataGenerator gen, ExistingFileHelper exFileHelper){ this.exFileHelper = exFileHelper; } + private ConfiguredModel emptyModel; + @Override protected void registerStatesAndModels(){ + makeEmpty(); + busbar(); } private void busbar(){ + PartialBlockstate state = getVariantBuilder(OEContent.Blocks.BUSBAR.get()).partialState(); + + EnumBusbarShape[] shapes = EnumBusbarShape.values(); + for(EnumBusbarShape shape:shapes){ + state.with(BusbarBlock.SHAPE, shape).setModels(this.emptyModel); + } + } + + private void makeEmpty(){ + BlockModelBuilder empty = models().getBuilder("empty"); + this.emptyModel = new ConfiguredModel(empty, 0, 0, false); + } + + /** Keeping it just incase i need something from it */ + @SuppressWarnings("unused") + private final void old(){ + // Insulators - BlockModelBuilder model_insulators_normal = busModel("models/block/obj/busbar/busbar_a.obj", "_with_insulators"); - BlockModelBuilder model_insulators_rotated = busModel("models/block/obj/busbar/busbar_a_alt.obj", "_with_insulators_pre_y_rotated"); + BlockModelBuilder model_insulators_normal = busModel("models/block/busbar/obj/busbar_a.obj", "_with_insulators"); + BlockModelBuilder model_insulators_rotated = busModel("models/block/busbar/obj/busbar_a_alt.obj", "_with_insulators_pre_y_rotated"); - BlockModelBuilder model_bend = busModel("models/block/obj/busbar/busbar_bend.obj", "_bend"); - BlockModelBuilder model_edge_inside = busModel("models/block/obj/busbar/busbar_edge_inside.obj", "_horizontal_up"); - BlockModelBuilder model_edge_outside = busModel("models/block/obj/busbar/busbar_edge_outside.obj", "_horizontal_down"); + BlockModelBuilder model_bend = busModel("models/block/busbar/obj/busbar_bend.obj", "_bend"); + BlockModelBuilder model_edge_inside = busModel("models/block/busbar/obj/busbar_edge_inside.obj", "_horizontal_up"); + BlockModelBuilder model_edge_outside = busModel("models/block/busbar/obj/busbar_edge_outside.obj", "_horizontal_down"); model_insulators_normal.assertExistence(); model_insulators_rotated.assertExistence(); @@ -57,6 +78,8 @@ private void busbar(){ EnumBusbarShape.Type.BENDS_FLOOR.forEachIndexed((i, shape) -> bus(shape, model_bend, 0, 90 + 90 * i)); EnumBusbarShape.Type.BENDS_CEILING.forEachIndexed((i, shape) -> bus(shape, model_bend, 180, 180 + 90 * i)); + + // TODO These do not have the correct rotations EnumBusbarShape.Type.BENDS_WALLS.forEachIndexed((i, shape) -> bus(shape, model_bend, -90, 90 * i)); EnumBusbarShape.Type.EDGE_INSIDE_FLOOR.forEachIndexed((i, shape) -> bus(shape, model_edge_inside, 0, 90 * i)); @@ -66,8 +89,7 @@ private void busbar(){ } private PartialBlockstate bus(EnumBusbarShape shape, BlockModelBuilder model, int x_rot, int y_rot){ - VariantBlockStateBuilder builder = getVariantBuilder(OEContent.Blocks.BUSBAR.get()); - PartialBlockstate state = builder.partialState(); + PartialBlockstate state = getVariantBuilder(OEContent.Blocks.BUSBAR.get()).partialState(); return state.with(BusbarBlock.SHAPE, shape) .addModels(new ConfiguredModel(model, x_rot % 360, y_rot % 360, false)); @@ -87,7 +109,7 @@ private PartialBlockstate bus(PartialBlockstate state, BlockModelBuilder m0, Blo } private BlockModelBuilder busModel(String modelPath, @Nullable String postFix){ - return objModel(OEContent.Blocks.BUSBAR.get(), modelPath, postFix, modLoc("block/obj/busbar")); + return objModel(OEContent.Blocks.BUSBAR.get(), modelPath, postFix, modLoc("block/busbar/obj")); } private BlockModelBuilder objModel(Block b, String modelPath, @Nullable String postFix, ResourceLocation texture){ diff --git a/src/datagen/java/twistedgate/overengineered/common/data/OEItemModels.java b/src/datagen/java/twistedgate/overengineered/common/data/OEItemModels.java index 1334449..c9cb751 100644 --- a/src/datagen/java/twistedgate/overengineered/common/data/OEItemModels.java +++ b/src/datagen/java/twistedgate/overengineered/common/data/OEItemModels.java @@ -13,7 +13,6 @@ import net.minecraftforge.client.model.generators.loaders.OBJLoaderBuilder; import net.minecraftforge.common.data.ExistingFileHelper; import twistedgate.overengineered.OverEngineered; -import twistedgate.overengineered.common.OEContent; public class OEItemModels extends ItemModelProvider{ public OEItemModels(DataGenerator generator, ExistingFileHelper existingFileHelper){ @@ -22,8 +21,10 @@ public OEItemModels(DataGenerator generator, ExistingFileHelper existingFileHelp @Override protected void registerModels(){ - ItemModelBuilder model = obj(OEContent.Blocks.BUSBAR.get(), "block/obj/busbar/busbar_a.obj") - .texture("texture", modLoc("block/obj/busbar")); + ItemModelBuilder model = withExistingParent("busbar", "overengineered:block/busbar/json/busbar_straight"); + +// ItemModelBuilder model = obj(OEContent.Blocks.BUSBAR.get(), "block/busbar/obj/busbar_a.obj") +// .texture("texture", modLoc("block/obj/busbar")); ModelBuilder.TransformsBuilder trans = model.transforms(); doTransform(trans, TransformType.FIRST_PERSON_LEFT_HAND, new Vector3f(0, 0, 0), new Vector3f(0, 45, 0), 1.0F); @@ -46,6 +47,7 @@ private void doTransform(ModelBuilder.TransformsBuilder transform, TransformT trans.end(); } + @SuppressWarnings("unused") private ItemModelBuilder obj(ItemLike item, String model){ return getBuilder(item.asItem().getRegistryName().toString()) .customLoader(OBJLoaderBuilder::begin) diff --git a/src/generated/resources/.cache/cache b/src/generated/resources/.cache/cache index 566a542..797960c 100644 --- a/src/generated/resources/.cache/cache +++ b/src/generated/resources/.cache/cache @@ -1,10 +1,6 @@ -0b32cc406cca12760e38534d246d526d7379c7d2 assets/overengineered/blockstates/busbar.json -165737f978732b3be1b991273410046a62c3602b assets/overengineered/models/block/busbar_bend.json -d38cc03cf37de4a0b62b6eb9167fb1282b38eedf assets/overengineered/models/block/busbar_horizontal_down.json -a3f79a2d4727885bc80374947d26cf1413cab082 assets/overengineered/models/block/busbar_horizontal_up.json -505c39a86a3e6ac0f2f99af30685e9ff435a7d3a assets/overengineered/models/block/busbar_with_insulators.json -83c90e24f79a0745afff4c0889ff8fb4c5191978 assets/overengineered/models/block/busbar_with_insulators_pre_y_rotated.json -47d3511e428faccc03c73d493604da978bad617a assets/overengineered/models/item/busbar.json +e47a0ffe7cb343f0d6d80203f410a3769cd0204c assets/overengineered/blockstates/busbar.json +9ed931619e39f59a8520c1e3b03fea2e9a56fb60 assets/overengineered/models/block/empty.json +6bb4790efda3e3868669888d11756508e65f6ba7 assets/overengineered/models/item/busbar.json f669ede4831f92d60da61cf680f634f40a2c6c2b data/overengineered/advancements/recipes/overengineered/busbar.json 84e62a1037f58c750ce069f12abdafe49f8be47b data/overengineered/advancements/recipes/overengineered/busbar2.json 9d6eee99845fd97468aa2085f9f4daa638d8cd7c data/overengineered/recipes/busbar.json diff --git a/src/generated/resources/assets/overengineered/blockstates/busbar.json b/src/generated/resources/assets/overengineered/blockstates/busbar.json index 345334b..10d2697 100644 --- a/src/generated/resources/assets/overengineered/blockstates/busbar.json +++ b/src/generated/resources/assets/overengineered/blockstates/busbar.json @@ -1,236 +1,160 @@ { "variants": { "shape=insulators_down_north_south": { - "model": "overengineered:block/busbar_with_insulators" + "model": "overengineered:block/empty" }, "shape=insulators_down_east_west": { - "model": "overengineered:block/busbar_with_insulators", - "y": 90 + "model": "overengineered:block/empty" }, "shape=insulators_up_north_south": { - "model": "overengineered:block/busbar_with_insulators", - "x": 180 + "model": "overengineered:block/empty" }, "shape=insulators_up_east_west": { - "model": "overengineered:block/busbar_with_insulators", - "x": 180, - "y": 90 + "model": "overengineered:block/empty" }, "shape=insulators_north_up_down": { - "model": "overengineered:block/busbar_with_insulators", - "x": -90 + "model": "overengineered:block/empty" }, "shape=insulators_east_up_down": { - "model": "overengineered:block/busbar_with_insulators", - "x": -90, - "y": 90 + "model": "overengineered:block/empty" }, "shape=insulators_south_up_down": { - "model": "overengineered:block/busbar_with_insulators", - "x": -90, - "y": 180 + "model": "overengineered:block/empty" }, "shape=insulators_west_up_down": { - "model": "overengineered:block/busbar_with_insulators", - "x": -90, - "y": 270 + "model": "overengineered:block/empty" }, "shape=insulators_north_east_west": { - "model": "overengineered:block/busbar_with_insulators_pre_y_rotated", - "x": -90 + "model": "overengineered:block/empty" }, "shape=insulators_east_north_south": { - "model": "overengineered:block/busbar_with_insulators_pre_y_rotated", - "x": -90, - "y": 90 + "model": "overengineered:block/empty" }, "shape=insulators_south_east_west": { - "model": "overengineered:block/busbar_with_insulators_pre_y_rotated", - "x": -90, - "y": 180 + "model": "overengineered:block/empty" }, "shape=insulators_west_north_south": { - "model": "overengineered:block/busbar_with_insulators_pre_y_rotated", - "x": -90, - "y": 270 + "model": "overengineered:block/empty" }, "shape=bend_down_north_east": { - "model": "overengineered:block/busbar_bend", - "y": 90 + "model": "overengineered:block/empty" }, "shape=bend_down_east_south": { - "model": "overengineered:block/busbar_bend", - "y": 180 + "model": "overengineered:block/empty" }, "shape=bend_down_south_west": { - "model": "overengineered:block/busbar_bend", - "y": 270 + "model": "overengineered:block/empty" }, "shape=bend_down_west_north": { - "model": "overengineered:block/busbar_bend" + "model": "overengineered:block/empty" }, "shape=bend_up_north_east": { - "model": "overengineered:block/busbar_bend", - "x": 180, - "y": 180 + "model": "overengineered:block/empty" }, "shape=bend_up_east_south": { - "model": "overengineered:block/busbar_bend", - "x": 180, - "y": 270 + "model": "overengineered:block/empty" }, "shape=bend_up_south_west": { - "model": "overengineered:block/busbar_bend", - "x": 180 + "model": "overengineered:block/empty" }, "shape=bend_up_west_north": { - "model": "overengineered:block/busbar_bend", - "x": 180, - "y": 90 + "model": "overengineered:block/empty" }, "shape=bend_north_down_east": { - "model": "overengineered:block/busbar_bend", - "x": -90 + "model": "overengineered:block/empty" }, "shape=bend_north_east_up": { - "model": "overengineered:block/busbar_bend", - "x": -90, - "y": 90 + "model": "overengineered:block/empty" }, "shape=bend_north_up_west": { - "model": "overengineered:block/busbar_bend", - "x": -90, - "y": 180 + "model": "overengineered:block/empty" }, "shape=bend_north_west_down": { - "model": "overengineered:block/busbar_bend", - "x": -90, - "y": 270 + "model": "overengineered:block/empty" }, "shape=bend_east_down_south": { - "model": "overengineered:block/busbar_bend", - "x": -90 + "model": "overengineered:block/empty" }, "shape=bend_east_south_up": { - "model": "overengineered:block/busbar_bend", - "x": -90, - "y": 90 + "model": "overengineered:block/empty" }, "shape=bend_east_up_north": { - "model": "overengineered:block/busbar_bend", - "x": -90, - "y": 180 + "model": "overengineered:block/empty" }, "shape=bend_east_north_down": { - "model": "overengineered:block/busbar_bend", - "x": -90, - "y": 270 + "model": "overengineered:block/empty" }, "shape=bend_south_down_west": { - "model": "overengineered:block/busbar_bend", - "x": -90 + "model": "overengineered:block/empty" }, "shape=bend_south_west_up": { - "model": "overengineered:block/busbar_bend", - "x": -90, - "y": 90 + "model": "overengineered:block/empty" }, "shape=bend_south_up_east": { - "model": "overengineered:block/busbar_bend", - "x": -90, - "y": 180 + "model": "overengineered:block/empty" }, "shape=bend_south_east_down": { - "model": "overengineered:block/busbar_bend", - "x": -90, - "y": 270 + "model": "overengineered:block/empty" }, "shape=bend_west_down_north": { - "model": "overengineered:block/busbar_bend", - "x": -90 + "model": "overengineered:block/empty" }, "shape=bend_west_north_up": { - "model": "overengineered:block/busbar_bend", - "x": -90, - "y": 90 + "model": "overengineered:block/empty" }, "shape=bend_west_up_south": { - "model": "overengineered:block/busbar_bend", - "x": -90, - "y": 180 + "model": "overengineered:block/empty" }, "shape=bend_west_south_down": { - "model": "overengineered:block/busbar_bend", - "x": -90, - "y": 270 + "model": "overengineered:block/empty" }, "shape=edge_inside_down_north_up_south": { - "model": "overengineered:block/busbar_horizontal_up", - "y": 180 + "model": "overengineered:block/empty" }, "shape=edge_inside_down_east_up_west": { - "model": "overengineered:block/busbar_horizontal_up", - "y": 270 + "model": "overengineered:block/empty" }, "shape=edge_inside_down_south_up_north": { - "model": "overengineered:block/busbar_horizontal_up" + "model": "overengineered:block/empty" }, "shape=edge_inside_down_west_up_east": { - "model": "overengineered:block/busbar_horizontal_up", - "y": 90 + "model": "overengineered:block/empty" }, "shape=edge_inside_up_north_down_south": { - "model": "overengineered:block/busbar_horizontal_up", - "x": 180 + "model": "overengineered:block/empty" }, "shape=edge_inside_up_east_down_west": { - "model": "overengineered:block/busbar_horizontal_up", - "x": 180, - "y": 90 + "model": "overengineered:block/empty" }, "shape=edge_inside_up_south_down_north": { - "model": "overengineered:block/busbar_horizontal_up", - "x": 180, - "y": 180 + "model": "overengineered:block/empty" }, "shape=edge_inside_up_west_down_east": { - "model": "overengineered:block/busbar_horizontal_up", - "x": 180, - "y": 270 + "model": "overengineered:block/empty" }, "shape=edge_outside_down_north_up_south": { - "model": "overengineered:block/busbar_horizontal_down" + "model": "overengineered:block/empty" }, "shape=edge_outside_down_east_up_west": { - "model": "overengineered:block/busbar_horizontal_down", - "y": 90 + "model": "overengineered:block/empty" }, "shape=edge_outside_down_south_up_north": { - "model": "overengineered:block/busbar_horizontal_down", - "y": 180 + "model": "overengineered:block/empty" }, "shape=edge_outside_down_west_up_east": { - "model": "overengineered:block/busbar_horizontal_down", - "y": 270 + "model": "overengineered:block/empty" }, "shape=edge_outside_up_north_down_south": { - "model": "overengineered:block/busbar_horizontal_down", - "x": 180 + "model": "overengineered:block/empty" }, "shape=edge_outside_up_east_down_west": { - "model": "overengineered:block/busbar_horizontal_down", - "x": 180, - "y": 90 + "model": "overengineered:block/empty" }, "shape=edge_outside_up_south_down_north": { - "model": "overengineered:block/busbar_horizontal_down", - "x": 180, - "y": 180 + "model": "overengineered:block/empty" }, "shape=edge_outside_up_west_down_east": { - "model": "overengineered:block/busbar_horizontal_down", - "x": 180, - "y": 270 + "model": "overengineered:block/empty" } } } \ No newline at end of file diff --git a/src/generated/resources/assets/overengineered/models/block/busbar_bend.json b/src/generated/resources/assets/overengineered/models/block/busbar_bend.json deleted file mode 100644 index 5680294..0000000 --- a/src/generated/resources/assets/overengineered/models/block/busbar_bend.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "textures": { - "texture": "overengineered:block/obj/busbar", - "particle": "overengineered:block/obj/busbar" - }, - "loader": "forge:obj", - "model": "overengineered:models/block/obj/busbar/busbar_bend.obj", - "flip-v": true -} \ No newline at end of file diff --git a/src/generated/resources/assets/overengineered/models/block/busbar_horizontal_down.json b/src/generated/resources/assets/overengineered/models/block/busbar_horizontal_down.json deleted file mode 100644 index 05ac416..0000000 --- a/src/generated/resources/assets/overengineered/models/block/busbar_horizontal_down.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "textures": { - "texture": "overengineered:block/obj/busbar", - "particle": "overengineered:block/obj/busbar" - }, - "loader": "forge:obj", - "model": "overengineered:models/block/obj/busbar/busbar_edge_outside.obj", - "flip-v": true -} \ No newline at end of file diff --git a/src/generated/resources/assets/overengineered/models/block/busbar_horizontal_up.json b/src/generated/resources/assets/overengineered/models/block/busbar_horizontal_up.json deleted file mode 100644 index 1a52db5..0000000 --- a/src/generated/resources/assets/overengineered/models/block/busbar_horizontal_up.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "textures": { - "texture": "overengineered:block/obj/busbar", - "particle": "overengineered:block/obj/busbar" - }, - "loader": "forge:obj", - "model": "overengineered:models/block/obj/busbar/busbar_edge_inside.obj", - "flip-v": true -} \ No newline at end of file diff --git a/src/generated/resources/assets/overengineered/models/block/busbar_with_insulators.json b/src/generated/resources/assets/overengineered/models/block/busbar_with_insulators.json deleted file mode 100644 index ddc4de8..0000000 --- a/src/generated/resources/assets/overengineered/models/block/busbar_with_insulators.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "textures": { - "texture": "overengineered:block/obj/busbar", - "particle": "overengineered:block/obj/busbar" - }, - "loader": "forge:obj", - "model": "overengineered:models/block/obj/busbar/busbar_a.obj", - "flip-v": true -} \ No newline at end of file diff --git a/src/generated/resources/assets/overengineered/models/block/busbar_with_insulators_pre_y_rotated.json b/src/generated/resources/assets/overengineered/models/block/busbar_with_insulators_pre_y_rotated.json deleted file mode 100644 index 505bd1b..0000000 --- a/src/generated/resources/assets/overengineered/models/block/busbar_with_insulators_pre_y_rotated.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "textures": { - "texture": "overengineered:block/obj/busbar", - "particle": "overengineered:block/obj/busbar" - }, - "loader": "forge:obj", - "model": "overengineered:models/block/obj/busbar/busbar_a_alt.obj", - "flip-v": true -} \ No newline at end of file diff --git a/src/generated/resources/assets/overengineered/models/block/empty.json b/src/generated/resources/assets/overengineered/models/block/empty.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/src/generated/resources/assets/overengineered/models/block/empty.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/generated/resources/assets/overengineered/models/item/busbar.json b/src/generated/resources/assets/overengineered/models/item/busbar.json index 0e819b8..f37d723 100644 --- a/src/generated/resources/assets/overengineered/models/item/busbar.json +++ b/src/generated/resources/assets/overengineered/models/item/busbar.json @@ -1,4 +1,5 @@ { + "parent": "overengineered:block/busbar/json/busbar_straight", "display": { "firstperson_lefthand": { "rotation": [ @@ -43,11 +44,5 @@ -7 ] } - }, - "textures": { - "texture": "overengineered:block/obj/busbar" - }, - "loader": "forge:obj", - "model": "overengineered:models/block/obj/busbar/busbar_a.obj", - "flip-v": true + } } \ No newline at end of file diff --git a/src/main/java/twistedgate/overengineered/client/ClientModBusEventHandlers.java b/src/main/java/twistedgate/overengineered/client/ClientModBusEventHandlers.java new file mode 100644 index 0000000..5a41e1e --- /dev/null +++ b/src/main/java/twistedgate/overengineered/client/ClientModBusEventHandlers.java @@ -0,0 +1,33 @@ +package twistedgate.overengineered.client; + +import java.util.function.Supplier; + +import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.client.event.EntityRenderersEvent.RegisterRenderers; +import net.minecraftforge.client.event.ModelRegistryEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; +import twistedgate.overengineered.OverEngineered; +import twistedgate.overengineered.client.render.BusbarRenderer; +import twistedgate.overengineered.common.OETileTypes; + +@Mod.EventBusSubscriber(modid = OverEngineered.MODID, value = Dist.CLIENT, bus = Bus.MOD) +public class ClientModBusEventHandlers{ + @SubscribeEvent + public static void registerModelLoaders(ModelRegistryEvent event){ + BusbarRenderer.init(); + } + + @SubscribeEvent + public static void registerRenders(RegisterRenderers ev){ + registerBERender(ev, OETileTypes.BUS.get(), BusbarRenderer::new); + } + + private static void registerBERender(RegisterRenderers ev, BlockEntityType type, Supplier> factory){ + ev.registerBlockEntityRenderer(type, ctx -> factory.get()); + } +} diff --git a/src/main/java/twistedgate/overengineered/client/render/BusbarRenderer.java b/src/main/java/twistedgate/overengineered/client/render/BusbarRenderer.java new file mode 100644 index 0000000..79002c7 --- /dev/null +++ b/src/main/java/twistedgate/overengineered/client/render/BusbarRenderer.java @@ -0,0 +1,135 @@ +package twistedgate.overengineered.client.render; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.function.Function; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.PoseStack.Pose; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.math.Quaternion; +import com.mojang.math.Vector3f; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.RenderType; +import net.minecraft.client.renderer.block.model.BakedQuad; +import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; +import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.core.Direction; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.client.model.ForgeModelBakery; +import net.minecraftforge.client.model.data.EmptyModelData; +import net.minecraftforge.client.model.data.IModelData; +import twistedgate.overengineered.common.blocks.tileentity.BusbarTileEntity; +import twistedgate.overengineered.utils.ResourceUtils; + +public class BusbarRenderer implements BlockEntityRenderer{ + static final ResourceLocation MODEL_BUSBAR_STRAIGHT = ResourceUtils.oe("block/busbar/json/busbar_straight"); + static final ResourceLocation MODEL_BUSBAR_BEND = ResourceUtils.oe("block/busbar/json/busbar_bend"); + + static final ResourceLocation MODEL_BUSBAR_EDGE_IN = ResourceUtils.oe("block/busbar/json/busbar_edge_inside"); + static final ResourceLocation MODEL_BUSBAR_EDGE_OUT = ResourceUtils.oe("block/busbar/json/busbar_edge_outside"); + + static final ResourceLocation MODEL_BUSBAR_CON_LV_A = ResourceUtils.oe("block/busbar/json/busconnector_lv_a"); + static final ResourceLocation MODEL_BUSBAR_CON_LV_B = ResourceUtils.oe("block/busbar/json/busconnector_lv_b"); + static final ResourceLocation MODEL_BUSBAR_CON_LV_C = ResourceUtils.oe("block/busbar/json/busconnector_lv_c"); + + static final ResourceLocation MODEL_BUSBAR_CON_MV_A = ResourceUtils.oe("block/busbar/json/busconnector_mv_a"); + static final ResourceLocation MODEL_BUSBAR_CON_MV_B = ResourceUtils.oe("block/busbar/json/busconnector_mv_b"); + static final ResourceLocation MODEL_BUSBAR_CON_MV_C = ResourceUtils.oe("block/busbar/json/busconnector_mv_c"); + + public static void init(){ + ForgeModelBakery.addSpecialModel(MODEL_BUSBAR_STRAIGHT); + ForgeModelBakery.addSpecialModel(MODEL_BUSBAR_BEND); + + ForgeModelBakery.addSpecialModel(MODEL_BUSBAR_EDGE_IN); + ForgeModelBakery.addSpecialModel(MODEL_BUSBAR_EDGE_OUT); + + ForgeModelBakery.addSpecialModel(MODEL_BUSBAR_CON_LV_A); + ForgeModelBakery.addSpecialModel(MODEL_BUSBAR_CON_LV_B); + ForgeModelBakery.addSpecialModel(MODEL_BUSBAR_CON_LV_C); + + ForgeModelBakery.addSpecialModel(MODEL_BUSBAR_CON_MV_A); + ForgeModelBakery.addSpecialModel(MODEL_BUSBAR_CON_MV_B); + ForgeModelBakery.addSpecialModel(MODEL_BUSBAR_CON_MV_C); + } + + @Override + public void render(BusbarTileEntity blockEntity, float partialTick, PoseStack matrix, MultiBufferSource buffer, int light, int overlay){ + matrix.pushPose(); + { + // TODO EnumBusbarShape dependant Rotation (& Translation since origin is not centered) + + matrix.translate(0, 0, 1); + matrix.mulPose(new Quaternion(Vector3f.YP, 90.0F, true)); + + renderModel(MODEL_BUSBAR_STRAIGHT, matrix, buffer, light, overlay); + } + matrix.popPose(); + } + + private static void renderModel(ResourceLocation modelRL, PoseStack matrix, MultiBufferSource buffer, int light, int overlay){ + List quads = Model.getCachedQuads(modelRL); + renderModel(quads, matrix, buffer, light, overlay); + } + + private static void renderModel(List quads, PoseStack matrix, MultiBufferSource buffer, int light, int overlay){ + Pose last = matrix.last(); + VertexConsumer solid = buffer.getBuffer(RenderType.solid()); + for(BakedQuad quad:quads){ + float f = quad.getDirection() == Direction.UP ? 1.0F : 0.75F; + + if(quad.getDirection() == Direction.NORTH || quad.getDirection() == Direction.SOUTH) + f = 0.5F; + + if(quad.getDirection() == Direction.EAST || quad.getDirection() == Direction.WEST) + f = 0.6F; + + solid.putBulkData(last, quad, f, f, f, light, overlay); + } + } + + public static class Model{ + private static final Random rand = new Random(42L); + private static final Function model = Minecraft.getInstance().getBlockRenderer().getBlockModelShaper().getModelManager()::getModel; + private static final Map> CACHE = new HashMap<>(); + private static boolean clearRequest = false; + + public static void requestCacheClear(){ + clearRequest = true; + } + + private static List getCachedQuads(ResourceLocation modelRL){ + if(clearRequest){ + CACHE.clear(); + clearRequest = false; + } + + return CACHE.computeIfAbsent(modelRL, Model::get); + } + + private static List get(ResourceLocation modelRL){ + rand.setSeed(42L); + + ArrayList quads = new ArrayList<>(get(MODEL_BUSBAR_STRAIGHT, null, null, rand, EmptyModelData.INSTANCE)); + for(Direction side:Direction.values()){ + // For some reason not all faces are returned, this gets the rest of them + quads.addAll(get(MODEL_BUSBAR_STRAIGHT, null, side, rand, EmptyModelData.INSTANCE)); + } + quads.trimToSize(); + return quads; + } + + private static List get(ResourceLocation modelRL, @Nullable BlockState state, @Nullable Direction side, @Nonnull Random rand, @Nonnull IModelData extraData){ + return model.apply(modelRL).getQuads(state, side, rand, extraData); + } + } +} diff --git a/src/main/java/twistedgate/overengineered/common/OEContent.java b/src/main/java/twistedgate/overengineered/common/OEContent.java index b9b65ae..768449e 100644 --- a/src/main/java/twistedgate/overengineered/common/OEContent.java +++ b/src/main/java/twistedgate/overengineered/common/OEContent.java @@ -1,15 +1,12 @@ package twistedgate.overengineered.common; -import net.minecraft.world.item.BlockItem; -import net.minecraft.world.item.Item; import net.minecraftforge.fml.event.lifecycle.ParallelDispatchEvent; import net.minecraftforge.registries.RegistryObject; -import twistedgate.overengineered.OverEngineered; import twistedgate.overengineered.common.blocks.busbar.BusbarBlock; public class OEContent{ public static class Blocks{ - public static final RegistryObject BUSBAR = OERegisters.registerBlock("busbar", BusbarBlock::new, b -> new BlockItem(b, new Item.Properties().tab(OverEngineered.creativeTab))); + public static final RegistryObject BUSBAR = OERegisters.registerBlock("busbar", BusbarBlock::new, BusbarBlock.Item::new); private static void forceClassLoad(){ } diff --git a/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java b/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java index 20f6737..f22282a 100644 --- a/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java +++ b/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java @@ -4,6 +4,9 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Objects; + +import javax.annotation.Nonnull; import com.mojang.math.Vector3f; @@ -12,8 +15,8 @@ import net.minecraft.core.particles.DustParticleOptions; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; -import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.BlockGetter; @@ -67,7 +70,7 @@ public boolean propagatesSkylightDown(BlockState pState, BlockGetter pLevel, Blo public BlockState getStateForPlacement(BlockPlaceContext context){ Direction facing = context.getClickedFace(); Direction direction = context.getHorizontalDirection(); - boolean crouching = context.getPlayer() != null ? context.getPlayer().isCrouching() : false; + boolean crouching = !(context.getPlayer() != null ? context.getPlayer().isCrouching() : false); // @formatter:off EnumBusbarShape shape = switch(facing){ @@ -85,15 +88,61 @@ public BlockState getStateForPlacement(BlockPlaceContext context){ } @Override - public InteractionResult use(BlockState pState, Level pLevel, BlockPos pPos, Player pPlayer, InteractionHand pHand, BlockHitResult pHit){ - ItemStack held = pPlayer.getItemInHand(InteractionHand.MAIN_HAND); + public InteractionResult use(BlockState selfState, Level level, BlockPos selfPos, Player player, InteractionHand hand, BlockHitResult hit){ + ItemStack held = player.getItemInHand(InteractionHand.MAIN_HAND); + + if(ExternalModContent.isIEWirecutter(held)){ + + boolean updateShapesDebug = false; + if(updateShapesDebug){ + if(!updateShapes) + updateShapes = true; + return InteractionResult.SUCCESS; + } + + try{ + BlockPos posNorth = selfPos.relative(Direction.NORTH); + BlockPos posEast = selfPos.relative(Direction.EAST); + BlockPos posSouth = selfPos.relative(Direction.SOUTH); + BlockPos posWest = selfPos.relative(Direction.WEST); + + BlockState stateNorth = level.getBlockState(posNorth); + BlockState stateEast = level.getBlockState(posEast); + BlockState stateSouth = level.getBlockState(posSouth); + BlockState stateWest = level.getBlockState(posWest); + + boolean north = stateNorth.is(this) && stateNorth.getValue(SHAPE).pointsBack(level, selfPos, posNorth); + boolean east = stateEast.is(this) && stateEast.getValue(SHAPE).pointsBack(level, selfPos, posEast); + boolean south = stateSouth.is(this) && stateSouth.getValue(SHAPE).pointsBack(level, selfPos, posSouth); + boolean west = stateWest.is(this) && stateWest.getValue(SHAPE).pointsBack(level, selfPos, posWest); + + final DustParticleOptions dst = new DustParticleOptions(new Vector3f(Vec3.fromRGB24(0x00FF00)), 1.0F); + + if(north) level.addParticle(dst, posNorth.getX() + .5, posNorth.getY() + .5, posNorth.getZ() + .5, 0.0, 0.0, 0.0); + if(east) level.addParticle(dst, posEast.getX() + .5, posEast.getY() + .5, posEast.getZ() + .5, 0.0, 0.0, 0.0); + if(south) level.addParticle(dst, posSouth.getX() + .5, posSouth.getY() + .5, posSouth.getZ() + .5, 0.0, 0.0, 0.0); + if(west) level.addParticle(dst, posWest.getX() + .5, posWest.getY() + .5, posWest.getZ() + .5, 0.0, 0.0, 0.0); + + if(!level.isClientSide){ + OverEngineered.log.info("North:\t{}", north); + OverEngineered.log.info("East:\t{}", east); + OverEngineered.log.info("South:\t{}", south); + OverEngineered.log.info("West:\t{}", west); + } + + }catch(Exception e){ + OverEngineered.log.info("Something went kaputt..", e); + } + + return InteractionResult.SUCCESS; + } if(ExternalModContent.isIEHammer(held)){ BlockPos lastPos = null; - BlockPos currentPos = pPos; + BlockPos currentPos = selfPos; - retLabel:for(int i = 0;i < 32;i++){ - BlockState state = pLevel.getBlockState(currentPos); + retLabel: for(int i = 0;i < 32;i++){ + BlockState state = level.getBlockState(currentPos); if(state.getBlock() == this){ EnumBusbarShape shape = state.getValue(SHAPE); @@ -101,8 +150,9 @@ public InteractionResult use(BlockState pState, Level pLevel, BlockPos pPos, Pla shape.connectionOffsets(list, currentPos); for(BlockPos p:list){ - if((lastPos == null || p != lastPos) && isBusbar(pLevel, p)){ - if(p == pPos) break retLabel; + if((lastPos == null || p != lastPos) && isBusbar(level, p)){ + if(p == selfPos) + break retLabel; lastPos = currentPos; currentPos = p; break; @@ -110,41 +160,39 @@ public InteractionResult use(BlockState pState, Level pLevel, BlockPos pPos, Pla } } } - + DustParticleOptions src = new DustParticleOptions(new Vector3f(Vec3.fromRGB24(0xFF0000)), 1.0F); DustParticleOptions dst = new DustParticleOptions(new Vector3f(Vec3.fromRGB24(0x00FF00)), 1.0F); - - pLevel.addParticle(src, pPos.getX() + .5, pPos.getY() + .5, pPos.getZ() + .5, 0.0, 0.0, 0.0); - pLevel.addParticle(dst, currentPos.getX() + .5, currentPos.getY() + .5, currentPos.getZ() + .5, 0.0, 0.0, 0.0); + + level.addParticle(src, selfPos.getX() + .5, selfPos.getY() + .5, selfPos.getZ() + .5, 0.0, 0.0, 0.0); + level.addParticle(dst, currentPos.getX() + .5, currentPos.getY() + .5, currentPos.getZ() + .5, 0.0, 0.0, 0.0); OverEngineered.log.info("End appears to be at {}", currentPos); return InteractionResult.SUCCESS; } if(ExternalModContent.isIEScrewdriver(held)){ - final BusbarCon bus = BusbarCon.create(pLevel, pPos, pState); - if(bus != null){ - bus.removeExistingConnections(); - OverEngineered.log.info("connections: {}", bus.freePoints.size()); - - DustParticleOptions dust = new DustParticleOptions(new Vector3f(Vec3.fromRGB24(0x00FF00)), 1.0F); - for(BlockPos p:bus.freePoints){ - pLevel.addParticle(dust, p.getX() + .5, p.getY() + .5, p.getZ() + .5, 0.0, 0.0, 0.0); - } + EnumBusbarShape selfShape = selfState.getValue(SHAPE); + List list = new ArrayList<>(); + selfShape.connectionOffsets(list, selfPos); + + DustParticleOptions dust = new DustParticleOptions(new Vector3f(Vec3.fromRGB24(0xFF7F00)), 1.0F); + for(BlockPos p:list){ + level.addParticle(dust, p.getX() + .5, p.getY() + .5, p.getZ() + .5, 0.0, 0.0, 0.0); } return InteractionResult.SUCCESS; } if(held.isEmpty()){ - EnumBusbarShape shape = pState.getValue(SHAPE); + EnumBusbarShape shape = selfState.getValue(SHAPE); List connections; { List list = new ArrayList<>(); - shape.connectionOffsets(list, pPos); + shape.connectionOffsets(list, selfPos); for(int i = 0;i < list.size();i++){ - BlockState state = pLevel.getBlockState(list.get(i)); + BlockState state = level.getBlockState(list.get(i)); if(state.getBlock() != this){ list.remove(i--); } @@ -155,7 +203,7 @@ public InteractionResult use(BlockState pState, Level pLevel, BlockPos pPos, Pla DustParticleOptions dust = new DustParticleOptions(new Vector3f(Vec3.fromRGB24(0x0000FF)), 1.0F); for(int i = 0;i < connections.size();i++){ BlockPos currentPos = connections.get(i); - pLevel.addParticle(dust, currentPos.getX() + .5, currentPos.getY() + .5, currentPos.getZ() + .5, 0.0, 0.0, 0.0); + level.addParticle(dust, currentPos.getX() + .5, currentPos.getY() + .5, currentPos.getZ() + .5, 0.0, 0.0, 0.0); } return InteractionResult.SUCCESS; @@ -164,29 +212,33 @@ public InteractionResult use(BlockState pState, Level pLevel, BlockPos pPos, Pla return InteractionResult.PASS; } - @Override - public void setPlacedBy(Level level, BlockPos pos, BlockState state, LivingEntity placer, ItemStack stack){ - } - - @Override - public void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldState, boolean isMoving){ - if(!oldState.is(state.getBlock())){ - final BusbarCon bus = BusbarCon.create(level, pos, state); - if(bus != null){ - bus.onPlace(true); - } - -// state = updateDir(level, pos, state, true); - } - } - @Override public void neighborChanged(BlockState state, Level level, BlockPos pos, Block lastBlock, BlockPos fromPos, boolean isMoving){ if(!level.isClientSide && level.getBlockState(pos).is(this)){ -// state = updateDir(level, pos, state, false); + change(state, level, pos); } } + private void change(final BlockState selfState, final Level level, final BlockPos selfPos){ + final EnumBusbarShape selfShape = selfState.getValue(SHAPE); + if(!selfShape.hasFreeConnectionPoint(level, selfPos)) + return; + + final LocalPlane plane = LocalPlane.get(selfShape, selfPos); + + final BlockState stateNorth = level.getBlockState(plane.a()); + final BlockState stateEast = level.getBlockState(plane.b()); + final BlockState stateSouth = level.getBlockState(plane.c()); + final BlockState stateWest = level.getBlockState(plane.d()); + + boolean north = stateNorth.is(this) && stateNorth.getValue(SHAPE).pointsBack(level, selfPos, plane.a()); + boolean east = stateEast.is(this) && stateEast.getValue(SHAPE).pointsBack(level, selfPos, plane.b()); + boolean south = stateSouth.is(this) && stateSouth.getValue(SHAPE).pointsBack(level, selfPos, plane.c()); + boolean west = stateWest.is(this) && stateWest.getValue(SHAPE).pointsBack(level, selfPos, plane.d()); + + level.setBlock(selfPos, selfState, 3); + } + @Deprecated @SuppressWarnings("unused") private BlockState updateDir(Level level, BlockPos pos, BlockState state, boolean placing){ @@ -210,10 +262,16 @@ public BlockEntityTicker getTicker(Level pLevel, Bloc } static final VoxelShape MISSING_SHAPE = Shapes.create(0.125, 0.125, 0.125, 0.875, 0.875, 0.875); - static final Map SHAPES_CACHE = makeShapeCache(); + static Map SHAPES_CACHE = makeShapeCache(); + + public static boolean updateShapes = false; @Override public VoxelShape getShape(BlockState pState, BlockGetter pLevel, BlockPos pPos, CollisionContext pContext){ + if(updateShapes){ + SHAPES_CACHE = makeShapeCache(); + updateShapes = false; + } return SHAPES_CACHE.getOrDefault(pState.getValue(SHAPE), MISSING_SHAPE); } @@ -258,10 +316,25 @@ private static Map makeShapeCache(){ case BEND_UP_SOUTH_WEST -> Shapes.create(0.0, 0.75, 0.125, 0.875, 1.0, 1.0); case BEND_UP_WEST_NORTH -> Shapes.create(0.0, 0.75, 0.0, 0.875, 1.0, 0.875); - case BEND_NORTH_DOWN_EAST, BEND_EAST_DOWN_SOUTH, BEND_SOUTH_DOWN_WEST, BEND_WEST_DOWN_NORTH -> Shapes.create(0.0, 0.125, 0.0, 0.875, 1.0, 0.25); - case BEND_NORTH_EAST_UP, BEND_EAST_SOUTH_UP, BEND_SOUTH_WEST_UP, BEND_WEST_NORTH_UP -> Shapes.create(0.75, 0.125, 0.0, 1.0, 1.0, 0.875); - case BEND_NORTH_UP_WEST, BEND_EAST_UP_NORTH, BEND_SOUTH_UP_EAST, BEND_WEST_UP_SOUTH -> Shapes.create(0.125, 0.125, 0.75, 1.0, 1.0, 1.0); - case BEND_NORTH_WEST_DOWN, BEND_EAST_NORTH_DOWN, BEND_SOUTH_EAST_DOWN, BEND_WEST_SOUTH_DOWN -> Shapes.create(0.0, 0.125, 0.125, 0.25, 1.0, 1.0); + case BEND_NORTH_DOWN_EAST -> Shapes.create(0.125, 0.125, 0.0, 1.0, 1.0, 0.25); + case BEND_NORTH_EAST_UP -> Shapes.create(0.125, 0.0, 0.0, 1.0, 0.875, 0.25); + case BEND_NORTH_UP_WEST -> Shapes.create(0.0, 0.125, 0.0, 0.875, 1.0, 0.25); + case BEND_NORTH_WEST_DOWN -> Shapes.create(0.0, 0.125, 0.0, 0.875, 1.0, 0.25); + + case BEND_EAST_DOWN_SOUTH -> Shapes.create(0.75, 0.125, 0.0, 1.0, 1.0, 0.875); + case BEND_EAST_SOUTH_UP -> Shapes.create(0.75, 0.125, 0.0, 1.0, 1.0, 0.875); + case BEND_EAST_UP_NORTH -> Shapes.create(0.75, 0.125, 0.0, 1.0, 1.0, 0.875); + case BEND_EAST_NORTH_DOWN -> Shapes.create(0.75, 0.125, 0.0, 1.0, 1.0, 0.875); + + case BEND_SOUTH_DOWN_WEST -> Shapes.create(0.125, 0.125, 0.75, 1.0, 1.0, 1.0); + case BEND_SOUTH_WEST_UP -> Shapes.create(0.125, 0.125, 0.75, 1.0, 1.0, 1.0); + case BEND_SOUTH_UP_EAST -> Shapes.create(0.125, 0.125, 0.75, 1.0, 1.0, 1.0); + case BEND_SOUTH_EAST_DOWN -> Shapes.create(0.125, 0.125, 0.75, 1.0, 1.0, 1.0); + + case BEND_WEST_DOWN_NORTH -> Shapes.create(0.0, 0.125, 0.125, 0.25, 1.0, 1.0); + case BEND_WEST_NORTH_UP -> Shapes.create(0.0, 0.125, 0.125, 0.25, 1.0, 1.0); + case BEND_WEST_UP_SOUTH -> Shapes.create(0.0, 0.125, 0.125, 0.25, 1.0, 1.0); + case BEND_WEST_SOUTH_DOWN -> Shapes.create(0.0, 0.125, 0.125, 0.25, 1.0, 1.0); case EDGE_OUTSIDE_DOWN_NORTH_UP_SOUTH -> Shapes.create(0.125, 0.0, 0.75, 0.875, 0.25, 1.0); case EDGE_OUTSIDE_DOWN_EAST_UP_WEST -> Shapes.create(0.0, 0.0, 0.125, 0.25, 0.25, 0.875); @@ -295,4 +368,76 @@ public static boolean isBusbar(Level level, BlockPos pos){ public static boolean isBusbar(BlockState state){ return state.getBlock() instanceof BusbarBlock; } + + private static record LocalPlane(Direction facing, BlockPos a, BlockPos b, BlockPos c, BlockPos d){ + public static LocalPlane get(@Nonnull EnumBusbarShape shape, @Nonnull BlockPos origin){ + Objects.requireNonNull(shape, "Shape should not be Null"); + Objects.requireNonNull(origin, "Origin should not be Null"); + + BlockPos north, east, south, west; + switch(shape.facing){ + case DOWN, UP -> { + north = origin.relative(Direction.NORTH); + east = origin.relative(Direction.EAST); + south = origin.relative(Direction.SOUTH); + west = origin.relative(Direction.WEST); + } + case NORTH -> { + north = origin.relative(Direction.UP); + east = origin.relative(Direction.EAST); + south = origin.relative(Direction.DOWN); + west = origin.relative(Direction.WEST); + } + case EAST -> { + north = origin.relative(Direction.UP); + east = origin.relative(Direction.SOUTH); + south = origin.relative(Direction.DOWN); + west = origin.relative(Direction.NORTH); + } + case SOUTH -> { + north = origin.relative(Direction.UP); + east = origin.relative(Direction.WEST); + south = origin.relative(Direction.DOWN); + west = origin.relative(Direction.EAST); + } + case WEST -> { + north = origin.relative(Direction.UP); + east = origin.relative(Direction.NORTH); + south = origin.relative(Direction.DOWN); + west = origin.relative(Direction.SOUTH); + } + default -> throw new IllegalArgumentException(shape.facing + " is an unknown Direction"); + } + + return new LocalPlane(shape.facing, north, east, south, west); + } + + private LocalPlane(Direction facing, BlockPos a, BlockPos b, BlockPos c, BlockPos d){ + this.facing = facing; + this.a = a; + this.b = b; + this.c = c; + this.d = d; + } + } + + public static class Item extends BlockItem{ + public Item(BusbarBlock block){ + super(block, new Item.Properties().tab(OverEngineered.creativeTab)); + } + + @Override + protected boolean placeBlock(BlockPlaceContext pContext, BlockState state){ + final Level level = pContext.getLevel(); + final BlockPos pos = pContext.getClickedPos(); + + if(state.getBlock() instanceof BusbarBlock bus){ + if(!level.isClientSide()) + bus.change(state, level, pos); + return true; + } + + return super.placeBlock(pContext, state); + } + } } diff --git a/src/main/java/twistedgate/overengineered/utils/ResourceUtils.java b/src/main/java/twistedgate/overengineered/utils/ResourceUtils.java index 6bb3421..026089a 100644 --- a/src/main/java/twistedgate/overengineered/utils/ResourceUtils.java +++ b/src/main/java/twistedgate/overengineered/utils/ResourceUtils.java @@ -8,22 +8,27 @@ import twistedgate.overengineered.OverEngineered; public class ResourceUtils{ + /** OverEngineeered namespace */ public static ResourceLocation oe(String str){ return new ResourceLocation(OverEngineered.MODID, str); } + /** CraftTweaker namespace */ public static ResourceLocation ct(String str){ return new ResourceLocation(CraftTweakerConstants.MOD_ID, str); } + /** ImmersiveEngineering namespace */ public static ResourceLocation ie(String str){ return new ResourceLocation(Lib.MODID, str); } + /** Forge namespace */ public static ResourceLocation forge(String str){ return new ResourceLocation(ForgeVersion.MOD_ID, str); } + /** Minecraft namespace */ public static ResourceLocation mc(String str){ return new ResourceLocation(ResourceLocation.DEFAULT_NAMESPACE, str); } diff --git a/src/main/java/twistedgate/overengineered/utils/enums/EnumBusbarShape.java b/src/main/java/twistedgate/overengineered/utils/enums/EnumBusbarShape.java index 73e23f7..adfc97e 100644 --- a/src/main/java/twistedgate/overengineered/utils/enums/EnumBusbarShape.java +++ b/src/main/java/twistedgate/overengineered/utils/enums/EnumBusbarShape.java @@ -1,19 +1,32 @@ package twistedgate.overengineered.utils.enums; +import static net.minecraft.core.Direction.DOWN; +import static net.minecraft.core.Direction.EAST; +import static net.minecraft.core.Direction.NORTH; +import static net.minecraft.core.Direction.SOUTH; +import static net.minecraft.core.Direction.UP; +import static net.minecraft.core.Direction.WEST; + import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.Iterator; import java.util.List; +import java.util.Objects; import java.util.Set; import java.util.function.BiConsumer; import java.util.stream.Stream; +import javax.annotation.Nullable; + import com.google.common.collect.Iterators; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.util.StringRepresentable; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; +import twistedgate.overengineered.common.blocks.busbar.BusbarBlock; /** * @author TwistedGate @@ -21,70 +34,70 @@ public enum EnumBusbarShape implements StringRepresentable{ // @formatter:off // Straights with Insulators (FACING_FROM_TO) - INSULATORS_DOWN_NORTH_SOUTH(Direction.DOWN, Connections.NORTH_SOUTH), - INSULATORS_DOWN_EAST_WEST(Direction.DOWN, Connections.EAST_WEST), - INSULATORS_UP_NORTH_SOUTH(Direction.UP, Connections.NORTH_SOUTH), - INSULATORS_UP_EAST_WEST(Direction.UP, Connections.EAST_WEST), + INSULATORS_DOWN_NORTH_SOUTH(DOWN, Connections.NORTH_SOUTH), + INSULATORS_DOWN_EAST_WEST(DOWN, Connections.EAST_WEST), + INSULATORS_UP_NORTH_SOUTH(UP, Connections.NORTH_SOUTH), + INSULATORS_UP_EAST_WEST(UP, Connections.EAST_WEST), - INSULATORS_NORTH_UP_DOWN(Direction.NORTH, Connections.UP_DOWN), - INSULATORS_EAST_UP_DOWN(Direction.EAST, Connections.UP_DOWN), - INSULATORS_SOUTH_UP_DOWN(Direction.SOUTH, Connections.UP_DOWN), - INSULATORS_WEST_UP_DOWN(Direction.WEST, Connections.UP_DOWN), - INSULATORS_NORTH_EAST_WEST(Direction.NORTH, Connections.EAST_WEST), - INSULATORS_EAST_NORTH_SOUTH(Direction.EAST, Connections.NORTH_SOUTH), - INSULATORS_SOUTH_EAST_WEST(Direction.SOUTH, Connections.EAST_WEST), - INSULATORS_WEST_NORTH_SOUTH(Direction.WEST, Connections.NORTH_SOUTH), + INSULATORS_NORTH_UP_DOWN(NORTH, Connections.UP_DOWN), + INSULATORS_EAST_UP_DOWN(EAST, Connections.UP_DOWN), + INSULATORS_SOUTH_UP_DOWN(SOUTH, Connections.UP_DOWN), + INSULATORS_WEST_UP_DOWN(WEST, Connections.UP_DOWN), + INSULATORS_NORTH_EAST_WEST(NORTH, Connections.EAST_WEST), + INSULATORS_EAST_NORTH_SOUTH(EAST, Connections.NORTH_SOUTH), + INSULATORS_SOUTH_EAST_WEST(SOUTH, Connections.EAST_WEST), + INSULATORS_WEST_NORTH_SOUTH(WEST, Connections.NORTH_SOUTH), // 90° Bends (FACING_FROM_TO) - BEND_DOWN_NORTH_EAST(Direction.DOWN, Connections.NORTH_EAST), - BEND_DOWN_EAST_SOUTH(Direction.DOWN, Connections.EAST_SOUTH), - BEND_DOWN_SOUTH_WEST(Direction.DOWN, Connections.SOUTH_WEST), - BEND_DOWN_WEST_NORTH(Direction.DOWN, Connections.WEST_NORTH), + BEND_DOWN_NORTH_EAST(DOWN, Connections.NORTH_EAST), + BEND_DOWN_EAST_SOUTH(DOWN, Connections.EAST_SOUTH), + BEND_DOWN_SOUTH_WEST(DOWN, Connections.SOUTH_WEST), + BEND_DOWN_WEST_NORTH(DOWN, Connections.WEST_NORTH), - BEND_UP_NORTH_EAST(Direction.UP, Connections.NORTH_EAST), - BEND_UP_EAST_SOUTH(Direction.UP, Connections.EAST_SOUTH), - BEND_UP_SOUTH_WEST(Direction.UP, Connections.SOUTH_WEST), - BEND_UP_WEST_NORTH(Direction.UP, Connections.WEST_NORTH), + BEND_UP_NORTH_EAST(UP, Connections.NORTH_EAST), + BEND_UP_EAST_SOUTH(UP, Connections.EAST_SOUTH), + BEND_UP_SOUTH_WEST(UP, Connections.SOUTH_WEST), + BEND_UP_WEST_NORTH(UP, Connections.WEST_NORTH), - BEND_NORTH_DOWN_EAST(Direction.NORTH, Connections.DOWN_EAST), - BEND_NORTH_EAST_UP(Direction.NORTH, Connections.UP_EAST), - BEND_NORTH_UP_WEST(Direction.NORTH, Connections.UP_WEST), - BEND_NORTH_WEST_DOWN(Direction.NORTH, Connections.DOWN_WEST), + BEND_NORTH_DOWN_EAST(NORTH, Connections.DOWN_EAST), + BEND_NORTH_EAST_UP(NORTH, Connections.UP_EAST), + BEND_NORTH_UP_WEST(NORTH, Connections.UP_WEST), + BEND_NORTH_WEST_DOWN(NORTH, Connections.DOWN_WEST), - BEND_EAST_DOWN_SOUTH(Direction.EAST, Connections.DOWN_SOUTH), - BEND_EAST_SOUTH_UP(Direction.EAST, Connections.UP_SOUTH), - BEND_EAST_UP_NORTH(Direction.EAST, Connections.UP_NORTH), - BEND_EAST_NORTH_DOWN(Direction.EAST, Connections.DOWN_NORTH), + BEND_EAST_DOWN_SOUTH(EAST, Connections.DOWN_SOUTH), + BEND_EAST_SOUTH_UP(EAST, Connections.UP_SOUTH), + BEND_EAST_UP_NORTH(EAST, Connections.UP_NORTH), + BEND_EAST_NORTH_DOWN(EAST, Connections.DOWN_NORTH), - BEND_SOUTH_DOWN_WEST(Direction.SOUTH, Connections.DOWN_WEST), - BEND_SOUTH_WEST_UP(Direction.SOUTH, Connections.UP_WEST), - BEND_SOUTH_UP_EAST(Direction.SOUTH, Connections.UP_EAST), - BEND_SOUTH_EAST_DOWN(Direction.SOUTH, Connections.DOWN_EAST), + BEND_SOUTH_DOWN_WEST(SOUTH, Connections.DOWN_WEST), + BEND_SOUTH_WEST_UP(SOUTH, Connections.UP_WEST), + BEND_SOUTH_UP_EAST(SOUTH, Connections.UP_EAST), + BEND_SOUTH_EAST_DOWN(SOUTH, Connections.DOWN_EAST), - BEND_WEST_DOWN_NORTH(Direction.WEST, Connections.DOWN_NORTH), - BEND_WEST_NORTH_UP(Direction.WEST, Connections.UP_NORTH), - BEND_WEST_UP_SOUTH(Direction.WEST, Connections.UP_SOUTH), - BEND_WEST_SOUTH_DOWN(Direction.WEST, Connections.DOWN_SOUTH), + BEND_WEST_DOWN_NORTH(WEST, Connections.DOWN_NORTH), + BEND_WEST_NORTH_UP(WEST, Connections.UP_NORTH), + BEND_WEST_UP_SOUTH(WEST, Connections.UP_SOUTH), + BEND_WEST_SOUTH_DOWN(WEST, Connections.DOWN_SOUTH), // Inside Edges (FACING_SIDE_FROM_TO) - EDGE_INSIDE_DOWN_NORTH_UP_SOUTH (Direction.DOWN, Connections.UP_SOUTH), - EDGE_INSIDE_DOWN_EAST_UP_WEST (Direction.DOWN, Connections.UP_WEST), - EDGE_INSIDE_DOWN_SOUTH_UP_NORTH (Direction.DOWN, Connections.UP_NORTH), - EDGE_INSIDE_DOWN_WEST_UP_EAST (Direction.DOWN, Connections.UP_EAST), - EDGE_INSIDE_UP_NORTH_DOWN_SOUTH (Direction.UP, Connections.DOWN_SOUTH), - EDGE_INSIDE_UP_EAST_DOWN_WEST (Direction.UP, Connections.DOWN_WEST), - EDGE_INSIDE_UP_SOUTH_DOWN_NORTH (Direction.UP, Connections.DOWN_NORTH), - EDGE_INSIDE_UP_WEST_DOWN_EAST (Direction.UP, Connections.DOWN_EAST), + EDGE_INSIDE_DOWN_NORTH_UP_SOUTH (DOWN, Connections.UP_SOUTH), + EDGE_INSIDE_DOWN_EAST_UP_WEST (DOWN, Connections.UP_WEST), + EDGE_INSIDE_DOWN_SOUTH_UP_NORTH (DOWN, Connections.UP_NORTH), + EDGE_INSIDE_DOWN_WEST_UP_EAST (DOWN, Connections.UP_EAST), + EDGE_INSIDE_UP_NORTH_DOWN_SOUTH (UP, Connections.DOWN_SOUTH), + EDGE_INSIDE_UP_EAST_DOWN_WEST (UP, Connections.DOWN_WEST), + EDGE_INSIDE_UP_SOUTH_DOWN_NORTH (UP, Connections.DOWN_NORTH), + EDGE_INSIDE_UP_WEST_DOWN_EAST (UP, Connections.DOWN_EAST), // Outside Edges (FACING_SIDE_FROM_TO) - EDGE_OUTSIDE_DOWN_NORTH_UP_SOUTH(Direction.DOWN, Connections.UP_SOUTH), - EDGE_OUTSIDE_DOWN_EAST_UP_WEST (Direction.DOWN, Connections.UP_WEST), - EDGE_OUTSIDE_DOWN_SOUTH_UP_NORTH(Direction.DOWN, Connections.UP_NORTH), - EDGE_OUTSIDE_DOWN_WEST_UP_EAST (Direction.DOWN, Connections.UP_EAST), - EDGE_OUTSIDE_UP_NORTH_DOWN_SOUTH(Direction.UP, Connections.DOWN_SOUTH), - EDGE_OUTSIDE_UP_EAST_DOWN_WEST (Direction.UP, Connections.DOWN_WEST), - EDGE_OUTSIDE_UP_SOUTH_DOWN_NORTH(Direction.UP, Connections.DOWN_NORTH), - EDGE_OUTSIDE_UP_WEST_DOWN_EAST (Direction.UP, Connections.DOWN_EAST), + EDGE_OUTSIDE_DOWN_NORTH_UP_SOUTH(DOWN, Connections.UP_SOUTH), + EDGE_OUTSIDE_DOWN_EAST_UP_WEST (DOWN, Connections.UP_WEST), + EDGE_OUTSIDE_DOWN_SOUTH_UP_NORTH(DOWN, Connections.UP_NORTH), + EDGE_OUTSIDE_DOWN_WEST_UP_EAST (DOWN, Connections.UP_EAST), + EDGE_OUTSIDE_UP_NORTH_DOWN_SOUTH(UP, Connections.DOWN_SOUTH), + EDGE_OUTSIDE_UP_EAST_DOWN_WEST (UP, Connections.DOWN_WEST), + EDGE_OUTSIDE_UP_SOUTH_DOWN_NORTH(UP, Connections.DOWN_NORTH), + EDGE_OUTSIDE_UP_WEST_DOWN_EAST (UP, Connections.DOWN_EAST), ; // @formatter:on @@ -103,6 +116,38 @@ private EnumBusbarShape(String name, Direction facing, Connections cons){ this.connections = cons; } + public boolean hasFreeConnectionPoint(Level level, BlockPos pos){ + boolean ret = false; + for(Direction d:this.connections.points){ + BlockState state = level.getBlockState(pos.relative(d)); + if(!(state.getBlock() instanceof BusbarBlock)){ + ret |= true; + } + } + return ret; + } + + /** + * + * @param level + * @param source Position from which this method was called + * @param selfPos The current position + * @return if the current shape points back to source + */ + public boolean pointsBack(Level level, BlockPos source, BlockPos selfPos){ + BlockState state = level.getBlockState(selfPos); + if(!(state.getBlock() instanceof BusbarBlock)) + return false; + + // Do any of the points, point back to source? + for(Direction p:this.connections.points){ + if(selfPos.relative(p).equals(source)) + return true; + } + + return false; + } + public void connectionOffsets(final List list, BlockPos pos){ for(Direction p:this.connections.points){ list.add(pos.relative(p)); @@ -118,25 +163,147 @@ public boolean compatibleWith(EnumBusbarShape other){ return this.connections.compatibleWith(other.connections); } + // STATIC STUFF + + private static boolean checkBothWaysSided(Direction side, Direction from, Direction to, Direction a, Direction b, Direction c){ + return side == a && checkBothWays(from, to, a, b); + } + + private static boolean checkBothWays(Direction from, Direction to, Direction a, Direction b){ + return (from == a && to == b) || (from == b && to == a); + } + + @Nullable + public static EnumBusbarShape get(Direction facing, Direction from, Direction to){ + return get(facing, null, from, to); + } + + @Nullable + public static EnumBusbarShape get(Direction facing, @Nullable Direction side, Direction from, Direction to){ + Objects.requireNonNull(facing, "\"Facing\" must not be Null."); + Objects.requireNonNull(from, "\"From\" must not be Null."); + Objects.requireNonNull(to, "\"To\" must not be Null."); + + // Straights with Insulators (FACING_FROM_TO) + switch(facing){ + case UP -> { + if(checkBothWays(from, to, NORTH, SOUTH)) return INSULATORS_UP_NORTH_SOUTH; + if(checkBothWays(from, to, EAST, WEST)) return INSULATORS_UP_EAST_WEST; + } + case DOWN -> { + if(checkBothWays(from, to, NORTH, SOUTH)) return INSULATORS_DOWN_NORTH_SOUTH; + if(checkBothWays(from, to, EAST, WEST)) return INSULATORS_DOWN_EAST_WEST; + } + case NORTH -> { + if(checkBothWays(from, to, UP, DOWN)) return INSULATORS_NORTH_UP_DOWN; + if(checkBothWays(from, to, EAST, WEST)) return INSULATORS_NORTH_EAST_WEST; + } + case EAST -> { + if(checkBothWays(from, to, UP, DOWN)) return INSULATORS_EAST_UP_DOWN; + if(checkBothWays(from, to, NORTH, SOUTH)) return INSULATORS_EAST_NORTH_SOUTH; + } + case SOUTH -> { + if(checkBothWays(from, to, UP, DOWN)) return INSULATORS_SOUTH_UP_DOWN; + if(checkBothWays(from, to, EAST, WEST)) return INSULATORS_SOUTH_EAST_WEST; + } + case WEST -> { + if(checkBothWays(from, to, UP, DOWN)) return INSULATORS_WEST_UP_DOWN; + if(checkBothWays(from, to, NORTH, SOUTH)) return INSULATORS_WEST_NORTH_SOUTH; + } + } + + // 90° Bends (FACING_FROM_TO) + switch(facing){ + case UP -> { + if(checkBothWays(from, to, NORTH, EAST)) return BEND_UP_NORTH_EAST; + if(checkBothWays(from, to, EAST, SOUTH)) return BEND_UP_EAST_SOUTH; + if(checkBothWays(from, to, SOUTH, WEST)) return BEND_UP_SOUTH_WEST; + if(checkBothWays(from, to, WEST, NORTH)) return BEND_UP_WEST_NORTH; + } + case DOWN -> { + if(checkBothWays(from, to, NORTH, EAST)) return BEND_DOWN_NORTH_EAST; + if(checkBothWays(from, to, EAST, SOUTH)) return BEND_DOWN_EAST_SOUTH; + if(checkBothWays(from, to, SOUTH, WEST)) return BEND_DOWN_SOUTH_WEST; + if(checkBothWays(from, to, WEST, NORTH)) return BEND_DOWN_WEST_NORTH; + } + case NORTH -> { + if(checkBothWays(from, to, DOWN, EAST)) return BEND_NORTH_DOWN_EAST; + if(checkBothWays(from, to, EAST, UP)) return BEND_NORTH_EAST_UP; + if(checkBothWays(from, to, UP, WEST)) return BEND_NORTH_UP_WEST; + if(checkBothWays(from, to, WEST, DOWN)) return BEND_NORTH_WEST_DOWN; + } + case EAST -> { + if(checkBothWays(from, to, DOWN, SOUTH)) return BEND_EAST_DOWN_SOUTH; + if(checkBothWays(from, to, SOUTH, UP)) return BEND_EAST_SOUTH_UP; + if(checkBothWays(from, to, UP, NORTH)) return BEND_EAST_UP_NORTH; + if(checkBothWays(from, to, NORTH, DOWN)) return BEND_EAST_NORTH_DOWN; + } + case SOUTH -> { + if(checkBothWays(from, to, DOWN, WEST)) return BEND_SOUTH_DOWN_WEST; + if(checkBothWays(from, to, WEST, UP)) return BEND_SOUTH_WEST_UP; + if(checkBothWays(from, to, UP, EAST)) return BEND_SOUTH_UP_EAST; + if(checkBothWays(from, to, EAST, DOWN)) return BEND_SOUTH_EAST_DOWN; + } + case WEST -> { + if(checkBothWays(from, to, DOWN, NORTH)) return BEND_WEST_DOWN_NORTH; + if(checkBothWays(from, to, NORTH, UP)) return BEND_WEST_NORTH_UP; + if(checkBothWays(from, to, UP, SOUTH)) return BEND_WEST_UP_SOUTH; + if(checkBothWays(from, to, SOUTH, DOWN)) return BEND_WEST_SOUTH_DOWN; + } + } + + // Inside/Outside Edges (FACING_SIDE_FROM_TO) + if(side != null){ + switch(facing){ + case UP -> { + if(checkBothWaysSided(side, from, to, NORTH, DOWN, SOUTH)) return EDGE_INSIDE_UP_NORTH_DOWN_SOUTH; + if(checkBothWaysSided(side, from, to, EAST, DOWN, WEST)) return EDGE_INSIDE_UP_EAST_DOWN_WEST; + if(checkBothWaysSided(side, from, to, SOUTH, DOWN, NORTH)) return EDGE_INSIDE_UP_SOUTH_DOWN_NORTH; + if(checkBothWaysSided(side, from, to, WEST, DOWN, EAST)) return EDGE_INSIDE_UP_WEST_DOWN_EAST; + + if(checkBothWaysSided(side, from, to, NORTH, UP, SOUTH)) return EDGE_OUTSIDE_DOWN_NORTH_UP_SOUTH; + if(checkBothWaysSided(side, from, to, EAST, UP, WEST)) return EDGE_OUTSIDE_DOWN_EAST_UP_WEST; + if(checkBothWaysSided(side, from, to, SOUTH, UP, NORTH)) return EDGE_OUTSIDE_DOWN_SOUTH_UP_NORTH; + if(checkBothWaysSided(side, from, to, WEST, UP, EAST)) return EDGE_OUTSIDE_DOWN_WEST_UP_EAST; + } + case DOWN -> { + if(checkBothWaysSided(side, from, to, NORTH, UP, SOUTH)) return EDGE_INSIDE_DOWN_NORTH_UP_SOUTH; + if(checkBothWaysSided(side, from, to, EAST, UP, WEST)) return EDGE_INSIDE_DOWN_EAST_UP_WEST; + if(checkBothWaysSided(side, from, to, SOUTH, UP, NORTH)) return EDGE_INSIDE_DOWN_SOUTH_UP_NORTH; + if(checkBothWaysSided(side, from, to, WEST, UP, EAST)) return EDGE_INSIDE_DOWN_WEST_UP_EAST; + + if(checkBothWaysSided(side, from, to, NORTH, DOWN, SOUTH)) return EDGE_OUTSIDE_UP_NORTH_DOWN_SOUTH; + if(checkBothWaysSided(side, from, to, EAST, DOWN, WEST)) return EDGE_OUTSIDE_UP_EAST_DOWN_WEST; + if(checkBothWaysSided(side, from, to, SOUTH, DOWN, NORTH)) return EDGE_OUTSIDE_UP_SOUTH_DOWN_NORTH; + if(checkBothWaysSided(side, from, to, WEST, DOWN, EAST)) return EDGE_OUTSIDE_UP_WEST_DOWN_EAST; + } + case NORTH, EAST, SOUTH, WEST -> { + } + } + } + + return null; + } + public static enum Connections{ - NORTH_SOUTH(Direction.NORTH, Direction.SOUTH), - EAST_WEST(Direction.EAST, Direction.WEST), - UP_DOWN(Direction.UP, Direction.DOWN), + NORTH_SOUTH(NORTH, SOUTH), + EAST_WEST(EAST, WEST), + UP_DOWN(UP, DOWN), - NORTH_EAST(Direction.NORTH, Direction.EAST), - EAST_SOUTH(Direction.EAST, Direction.SOUTH), - SOUTH_WEST(Direction.SOUTH, Direction.WEST), - WEST_NORTH(Direction.WEST, Direction.NORTH), + NORTH_EAST(NORTH, EAST), + EAST_SOUTH(EAST, SOUTH), + SOUTH_WEST(SOUTH, WEST), + WEST_NORTH(WEST, NORTH), - UP_NORTH(Direction.UP, Direction.NORTH), - UP_EAST(Direction.UP, Direction.EAST), - UP_SOUTH(Direction.UP, Direction.SOUTH), - UP_WEST(Direction.UP, Direction.WEST), + UP_NORTH(UP, NORTH), + UP_EAST(UP, EAST), + UP_SOUTH(UP, SOUTH), + UP_WEST(UP, WEST), - DOWN_NORTH(Direction.DOWN, Direction.NORTH), - DOWN_EAST(Direction.DOWN, Direction.EAST), - DOWN_SOUTH(Direction.DOWN, Direction.SOUTH), - DOWN_WEST(Direction.DOWN, Direction.WEST) + DOWN_NORTH(DOWN, NORTH), + DOWN_EAST(DOWN, EAST), + DOWN_SOUTH(DOWN, SOUTH), + DOWN_WEST(DOWN, WEST) ; final Direction[] points; diff --git a/src/main/resources/assets/overengineered/models/block/busbar/json/busbar_bend.json b/src/main/resources/assets/overengineered/models/block/busbar/json/busbar_bend.json new file mode 100644 index 0000000..0de0484 --- /dev/null +++ b/src/main/resources/assets/overengineered/models/block/busbar/json/busbar_bend.json @@ -0,0 +1,9 @@ +{ + "loader": "forge:obj", + "model": "overengineered:models/block/busbar/obj/busbar_bend.obj", + "textures": { + "texture": "overengineered:block/obj/busbar", + "particle": "overengineered:block/obj/busbar" + }, + "flip-v": true +} \ No newline at end of file diff --git a/src/main/resources/assets/overengineered/models/block/busbar/json/busbar_edge_inside.json b/src/main/resources/assets/overengineered/models/block/busbar/json/busbar_edge_inside.json new file mode 100644 index 0000000..657be0c --- /dev/null +++ b/src/main/resources/assets/overengineered/models/block/busbar/json/busbar_edge_inside.json @@ -0,0 +1,9 @@ +{ + "loader": "forge:obj", + "model": "overengineered:models/block/busbar/obj/busbar_edge_inside.obj", + "textures": { + "texture": "overengineered:block/obj/busbar", + "particle": "overengineered:block/obj/busbar" + }, + "flip-v": true +} \ No newline at end of file diff --git a/src/main/resources/assets/overengineered/models/block/busbar/json/busbar_edge_outside.json b/src/main/resources/assets/overengineered/models/block/busbar/json/busbar_edge_outside.json new file mode 100644 index 0000000..af84831 --- /dev/null +++ b/src/main/resources/assets/overengineered/models/block/busbar/json/busbar_edge_outside.json @@ -0,0 +1,9 @@ +{ + "loader": "forge:obj", + "model": "overengineered:models/block/busbar/obj/busbar_edge_outside.obj", + "textures": { + "texture": "overengineered:block/obj/busbar", + "particle": "overengineered:block/obj/busbar" + }, + "flip-v": true +} \ No newline at end of file diff --git a/src/main/resources/assets/overengineered/models/block/busbar/json/busbar_straight.json b/src/main/resources/assets/overengineered/models/block/busbar/json/busbar_straight.json new file mode 100644 index 0000000..c58be8b --- /dev/null +++ b/src/main/resources/assets/overengineered/models/block/busbar/json/busbar_straight.json @@ -0,0 +1,9 @@ +{ + "loader": "forge:obj", + "model": "overengineered:models/block/busbar/obj/busbar_a.obj", + "textures": { + "texture": "overengineered:block/obj/busbar", + "particle": "overengineered:block/obj/busbar" + }, + "flip-v": true +} \ No newline at end of file diff --git a/src/main/resources/assets/overengineered/models/block/busbar/json/busconnector_lv_a.json b/src/main/resources/assets/overengineered/models/block/busbar/json/busconnector_lv_a.json new file mode 100644 index 0000000..dddfb02 --- /dev/null +++ b/src/main/resources/assets/overengineered/models/block/busbar/json/busconnector_lv_a.json @@ -0,0 +1,9 @@ +{ + "loader": "forge:obj", + "model": "overengineered:models/block/busbar/obj/busconnector_lv_a.obj", + "textures": { + "texture": "overengineered:block/obj/busbar", + "particle": "overengineered:block/obj/busbar" + }, + "flip-v": true +} \ No newline at end of file diff --git a/src/main/resources/assets/overengineered/models/block/busbar/json/busconnector_lv_b.json b/src/main/resources/assets/overengineered/models/block/busbar/json/busconnector_lv_b.json new file mode 100644 index 0000000..8bad438 --- /dev/null +++ b/src/main/resources/assets/overengineered/models/block/busbar/json/busconnector_lv_b.json @@ -0,0 +1,9 @@ +{ + "loader": "forge:obj", + "model": "overengineered:models/block/busbar/obj/busconnector_lv_b.obj", + "textures": { + "texture": "overengineered:block/obj/busbar", + "particle": "overengineered:block/obj/busbar" + }, + "flip-v": true +} \ No newline at end of file diff --git a/src/main/resources/assets/overengineered/models/block/busbar/json/busconnector_lv_c.json b/src/main/resources/assets/overengineered/models/block/busbar/json/busconnector_lv_c.json new file mode 100644 index 0000000..bc988bb --- /dev/null +++ b/src/main/resources/assets/overengineered/models/block/busbar/json/busconnector_lv_c.json @@ -0,0 +1,9 @@ +{ + "loader": "forge:obj", + "model": "overengineered:models/block/busbar/obj/busconnector_lv_c.obj", + "textures": { + "texture": "overengineered:block/obj/busbar", + "particle": "overengineered:block/obj/busbar" + }, + "flip-v": true +} \ No newline at end of file diff --git a/src/main/resources/assets/overengineered/models/block/busbar/json/busconnector_mv_a.json b/src/main/resources/assets/overengineered/models/block/busbar/json/busconnector_mv_a.json new file mode 100644 index 0000000..8c49ee4 --- /dev/null +++ b/src/main/resources/assets/overengineered/models/block/busbar/json/busconnector_mv_a.json @@ -0,0 +1,9 @@ +{ + "loader": "forge:obj", + "model": "overengineered:models/block/busbar/obj/busconnector_mv_a.obj", + "textures": { + "texture": "overengineered:block/obj/busbar", + "particle": "overengineered:block/obj/busbar" + }, + "flip-v": true +} \ No newline at end of file diff --git a/src/main/resources/assets/overengineered/models/block/busbar/json/busconnector_mv_b.json b/src/main/resources/assets/overengineered/models/block/busbar/json/busconnector_mv_b.json new file mode 100644 index 0000000..4fdfaba --- /dev/null +++ b/src/main/resources/assets/overengineered/models/block/busbar/json/busconnector_mv_b.json @@ -0,0 +1,9 @@ +{ + "loader": "forge:obj", + "model": "overengineered:models/block/busbar/obj/busconnector_mv_b.obj", + "textures": { + "texture": "overengineered:block/obj/busbar", + "particle": "overengineered:block/obj/busbar" + }, + "flip-v": true +} \ No newline at end of file diff --git a/src/main/resources/assets/overengineered/models/block/busbar/json/busconnector_mv_c.json b/src/main/resources/assets/overengineered/models/block/busbar/json/busconnector_mv_c.json new file mode 100644 index 0000000..46db3cc --- /dev/null +++ b/src/main/resources/assets/overengineered/models/block/busbar/json/busconnector_mv_c.json @@ -0,0 +1,9 @@ +{ + "loader": "forge:obj", + "model": "overengineered:models/block/busbar/obj/busconnector_mv_c.obj", + "textures": { + "texture": "overengineered:block/obj/busbar", + "particle": "overengineered:block/obj/busbar" + }, + "flip-v": true +} \ No newline at end of file diff --git a/src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_a.obj b/src/main/resources/assets/overengineered/models/block/busbar/obj/busbar_a.obj similarity index 100% rename from src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_a.obj rename to src/main/resources/assets/overengineered/models/block/busbar/obj/busbar_a.obj diff --git a/src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_a_alt.obj b/src/main/resources/assets/overengineered/models/block/busbar/obj/busbar_a_alt.obj similarity index 100% rename from src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_a_alt.obj rename to src/main/resources/assets/overengineered/models/block/busbar/obj/busbar_a_alt.obj diff --git a/src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_b.obj b/src/main/resources/assets/overengineered/models/block/busbar/obj/busbar_b.obj similarity index 100% rename from src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_b.obj rename to src/main/resources/assets/overengineered/models/block/busbar/obj/busbar_b.obj diff --git a/src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_b_alt.obj b/src/main/resources/assets/overengineered/models/block/busbar/obj/busbar_b_alt.obj similarity index 100% rename from src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_b_alt.obj rename to src/main/resources/assets/overengineered/models/block/busbar/obj/busbar_b_alt.obj diff --git a/src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_bend.obj b/src/main/resources/assets/overengineered/models/block/busbar/obj/busbar_bend.obj similarity index 100% rename from src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_bend.obj rename to src/main/resources/assets/overengineered/models/block/busbar/obj/busbar_bend.obj diff --git a/src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_edge_inside.obj b/src/main/resources/assets/overengineered/models/block/busbar/obj/busbar_edge_inside.obj similarity index 100% rename from src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_edge_inside.obj rename to src/main/resources/assets/overengineered/models/block/busbar/obj/busbar_edge_inside.obj diff --git a/src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_edge_outside.obj b/src/main/resources/assets/overengineered/models/block/busbar/obj/busbar_edge_outside.obj similarity index 100% rename from src/main/resources/assets/overengineered/models/block/obj/busbar/busbar_edge_outside.obj rename to src/main/resources/assets/overengineered/models/block/busbar/obj/busbar_edge_outside.obj diff --git a/src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_lv_a.obj b/src/main/resources/assets/overengineered/models/block/busbar/obj/busconnector_lv_a.obj similarity index 100% rename from src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_lv_a.obj rename to src/main/resources/assets/overengineered/models/block/busbar/obj/busconnector_lv_a.obj diff --git a/src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_lv_b.obj b/src/main/resources/assets/overengineered/models/block/busbar/obj/busconnector_lv_b.obj similarity index 100% rename from src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_lv_b.obj rename to src/main/resources/assets/overengineered/models/block/busbar/obj/busconnector_lv_b.obj diff --git a/src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_lv_c.obj b/src/main/resources/assets/overengineered/models/block/busbar/obj/busconnector_lv_c.obj similarity index 100% rename from src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_lv_c.obj rename to src/main/resources/assets/overengineered/models/block/busbar/obj/busconnector_lv_c.obj diff --git a/src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_mv_a.obj b/src/main/resources/assets/overengineered/models/block/busbar/obj/busconnector_mv_a.obj similarity index 100% rename from src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_mv_a.obj rename to src/main/resources/assets/overengineered/models/block/busbar/obj/busconnector_mv_a.obj diff --git a/src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_mv_b.obj b/src/main/resources/assets/overengineered/models/block/busbar/obj/busconnector_mv_b.obj similarity index 100% rename from src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_mv_b.obj rename to src/main/resources/assets/overengineered/models/block/busbar/obj/busconnector_mv_b.obj diff --git a/src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_mv_c.obj b/src/main/resources/assets/overengineered/models/block/busbar/obj/busconnector_mv_c.obj similarity index 100% rename from src/main/resources/assets/overengineered/models/block/obj/busbar/busconnector_mv_c.obj rename to src/main/resources/assets/overengineered/models/block/busbar/obj/busconnector_mv_c.obj diff --git a/src/main/resources/assets/overengineered/models/block/obj/busbar/busmaterial.mtl b/src/main/resources/assets/overengineered/models/block/busbar/obj/busmaterial.mtl similarity index 100% rename from src/main/resources/assets/overengineered/models/block/obj/busbar/busmaterial.mtl rename to src/main/resources/assets/overengineered/models/block/busbar/obj/busmaterial.mtl From 3b4b4246f650690fb6fc6c9348579cde14923349 Mon Sep 17 00:00:00 2001 From: TwistedGate <31029668+TwistedGate@users.noreply.github.com> Date: Mon, 25 Dec 2023 23:35:12 +0100 Subject: [PATCH 23/26] Switched Color Emulating the default lighting stuff that happens --- .../client/render/BusbarRenderer.java | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/main/java/twistedgate/overengineered/client/render/BusbarRenderer.java b/src/main/java/twistedgate/overengineered/client/render/BusbarRenderer.java index 79002c7..6c3d7a6 100644 --- a/src/main/java/twistedgate/overengineered/client/render/BusbarRenderer.java +++ b/src/main/java/twistedgate/overengineered/client/render/BusbarRenderer.java @@ -85,13 +85,12 @@ private static void renderModel(List quads, PoseStack matrix, MultiBu Pose last = matrix.last(); VertexConsumer solid = buffer.getBuffer(RenderType.solid()); for(BakedQuad quad:quads){ - float f = quad.getDirection() == Direction.UP ? 1.0F : 0.75F; - - if(quad.getDirection() == Direction.NORTH || quad.getDirection() == Direction.SOUTH) - f = 0.5F; - - if(quad.getDirection() == Direction.EAST || quad.getDirection() == Direction.WEST) - f = 0.6F; + float f = switch(quad.getDirection()){ + case DOWN -> 0.75F; + case NORTH, SOUTH -> 0.5F; + case EAST, WEST -> 0.6F; + default -> 1.0F; + }; solid.putBulkData(last, quad, f, f, f, light, overlay); } From e2cc54ed61da127f44d4e9de6c701ae12b32fa78 Mon Sep 17 00:00:00 2001 From: TwistedGate <31029668+TwistedGate@users.noreply.github.com> Date: Tue, 26 Dec 2023 00:15:37 +0100 Subject: [PATCH 24/26] Moved origin to "center" of busbar models --- .../client/render/BusbarRenderer.java | 7 +- .../block/busbar/json/busbar_straight.json | 2 +- .../obj/{busbar_a_alt.obj => busbar.obj} | 154 ++++---- .../models/block/busbar/obj/busbar_a.obj | 351 ------------------ .../models/block/busbar/obj/busbar_b.obj | 120 ------ .../models/block/busbar/obj/busbar_b_alt.obj | 120 ------ .../models/block/busbar/obj/busbar_bend.obj | 194 +++++----- .../block/busbar/obj/busbar_edge_inside.obj | 318 ++++++++-------- .../block/busbar/obj/busbar_edge_outside.obj | 96 ++--- .../block/busbar/obj/busconnector_lv_a.obj | 26 +- .../block/busbar/obj/busconnector_lv_b.obj | 26 +- .../block/busbar/obj/busconnector_lv_c.obj | 34 +- .../block/busbar/obj/busconnector_mv_a.obj | 34 +- .../block/busbar/obj/busconnector_mv_b.obj | 34 +- .../block/busbar/obj/busconnector_mv_c.obj | 42 +-- 15 files changed, 484 insertions(+), 1074 deletions(-) rename src/main/resources/assets/overengineered/models/block/busbar/obj/{busbar_a_alt.obj => busbar.obj} (74%) delete mode 100644 src/main/resources/assets/overengineered/models/block/busbar/obj/busbar_a.obj delete mode 100644 src/main/resources/assets/overengineered/models/block/busbar/obj/busbar_b.obj delete mode 100644 src/main/resources/assets/overengineered/models/block/busbar/obj/busbar_b_alt.obj diff --git a/src/main/java/twistedgate/overengineered/client/render/BusbarRenderer.java b/src/main/java/twistedgate/overengineered/client/render/BusbarRenderer.java index 6c3d7a6..74c6571 100644 --- a/src/main/java/twistedgate/overengineered/client/render/BusbarRenderer.java +++ b/src/main/java/twistedgate/overengineered/client/render/BusbarRenderer.java @@ -66,10 +66,11 @@ public static void init(){ public void render(BusbarTileEntity blockEntity, float partialTick, PoseStack matrix, MultiBufferSource buffer, int light, int overlay){ matrix.pushPose(); { - // TODO EnumBusbarShape dependant Rotation (& Translation since origin is not centered) + matrix.translate(0.5, 0.5, 0.5); - matrix.translate(0, 0, 1); - matrix.mulPose(new Quaternion(Vector3f.YP, 90.0F, true)); + // TODO EnumBusbarShape dependant Rotation + + matrix.mulPose(new Quaternion(Vector3f.YP, 0.0F, true)); renderModel(MODEL_BUSBAR_STRAIGHT, matrix, buffer, light, overlay); } diff --git a/src/main/resources/assets/overengineered/models/block/busbar/json/busbar_straight.json b/src/main/resources/assets/overengineered/models/block/busbar/json/busbar_straight.json index c58be8b..82de0d9 100644 --- a/src/main/resources/assets/overengineered/models/block/busbar/json/busbar_straight.json +++ b/src/main/resources/assets/overengineered/models/block/busbar/json/busbar_straight.json @@ -1,6 +1,6 @@ { "loader": "forge:obj", - "model": "overengineered:models/block/busbar/obj/busbar_a.obj", + "model": "overengineered:models/block/busbar/obj/busbar.obj", "textures": { "texture": "overengineered:block/obj/busbar", "particle": "overengineered:block/obj/busbar" diff --git a/src/main/resources/assets/overengineered/models/block/busbar/obj/busbar_a_alt.obj b/src/main/resources/assets/overengineered/models/block/busbar/obj/busbar.obj similarity index 74% rename from src/main/resources/assets/overengineered/models/block/busbar/obj/busbar_a_alt.obj rename to src/main/resources/assets/overengineered/models/block/busbar/obj/busbar.obj index 1caeb04..04f0488 100644 --- a/src/main/resources/assets/overengineered/models/block/busbar/obj/busbar_a_alt.obj +++ b/src/main/resources/assets/overengineered/models/block/busbar/obj/busbar.obj @@ -1,31 +1,31 @@ # Blender v2.79 (sub 0) OBJ File: 'busbar.blend' # www.blender.org mtllib busmaterial.mtl -o busbar_alt -v 0.000000 0.187500 0.437500 -v 0.000000 0.250000 0.437500 -v 1.000000 0.187500 0.437500 -v 1.000000 0.250000 0.437500 -v 0.000000 0.187500 0.562500 -v 0.000000 0.250000 0.562500 -v 1.000000 0.187500 0.562500 -v 1.000000 0.250000 0.562500 -v 0.000000 0.187500 0.125000 -v 0.000000 0.250000 0.125000 -v 1.000000 0.187500 0.125000 -v 1.000000 0.250000 0.125000 -v 0.000000 0.187500 0.250000 -v 0.000000 0.250000 0.250000 -v 1.000000 0.187500 0.250000 -v 1.000000 0.250000 0.250000 -v 0.000000 0.187500 0.750000 -v 0.000000 0.250000 0.750000 -v 1.000000 0.187500 0.750000 -v 1.000000 0.250000 0.750000 -v 0.000000 0.187500 0.875000 -v 0.000000 0.250000 0.875000 -v 1.000000 0.187500 0.875000 -v 1.000000 0.250000 0.875000 +o busbar +v -0.062500 -0.312500 0.500000 +v -0.062500 -0.250000 0.500000 +v -0.062500 -0.312500 -0.500000 +v -0.062500 -0.250000 -0.500000 +v 0.062500 -0.312500 0.500000 +v 0.062500 -0.250000 0.500000 +v 0.062500 -0.312500 -0.500000 +v 0.062500 -0.250000 -0.500000 +v -0.375000 -0.312500 0.500000 +v -0.375000 -0.250000 0.500000 +v -0.375000 -0.312500 -0.500000 +v -0.375000 -0.250000 -0.500000 +v -0.250000 -0.312500 0.500000 +v -0.250000 -0.250000 0.500000 +v -0.250000 -0.312500 -0.500000 +v -0.250000 -0.250000 -0.500000 +v 0.250000 -0.312500 0.500000 +v 0.250000 -0.250000 0.500000 +v 0.250000 -0.312500 -0.500000 +v 0.250000 -0.250000 -0.500000 +v 0.375000 -0.312500 0.500000 +v 0.375000 -0.250000 0.500000 +v 0.375000 -0.312500 -0.500000 +v 0.375000 -0.250000 -0.500000 vt 0.437500 0.812500 vt 0.437500 0.875000 vt 0.312500 0.875000 @@ -92,11 +92,11 @@ vt 1.000000 0.875000 vt 0.000000 0.875000 vt 1.000000 1.000000 vt 0.000000 1.000000 -vn 1.0000 0.0000 0.0000 -vn -1.0000 0.0000 0.0000 -vn 0.0000 -1.0000 0.0000 vn 0.0000 0.0000 -1.0000 vn 0.0000 0.0000 1.0000 +vn 0.0000 -1.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 1.0000 0.0000 0.0000 vn 0.0000 1.0000 0.0000 usemtl None s off @@ -118,55 +118,55 @@ f 21/53/3 17/54/3 19/55/3 23/56/3 f 19/57/4 17/58/4 18/59/4 20/60/4 f 21/61/5 23/62/5 24/63/5 22/64/5 f 24/63/6 20/65/6 18/66/6 22/64/6 -o busbar_isolators_alt -v 0.562500 0.062500 0.562500 -v 0.531250 0.125000 0.531250 -v 0.562500 0.062500 0.437500 -v 0.531250 0.125000 0.468750 -v 0.437500 0.062500 0.437500 -v 0.468750 0.125000 0.468750 -v 0.468750 0.125000 0.531250 -v 0.437500 0.062500 0.562500 -v 0.531250 0.187500 0.468750 -v 0.562500 0.000000 0.437500 -v 0.531250 0.187500 0.531250 -v 0.562500 0.000000 0.562500 -v 0.468750 0.187500 0.468750 -v 0.437500 0.000000 0.437500 -v 0.468750 0.187500 0.531250 -v 0.437500 0.000000 0.562500 -v 0.437500 0.000000 0.250000 -v 0.468750 0.187500 0.218750 -v 0.437500 0.000000 0.125000 -v 0.468750 0.187500 0.156250 -v 0.562500 0.000000 0.250000 -v 0.531250 0.187500 0.218750 -v 0.562500 0.000000 0.125000 -v 0.531250 0.187500 0.156250 -v 0.437500 0.062500 0.250000 -v 0.468750 0.125000 0.218750 -v 0.468750 0.125000 0.156250 -v 0.437500 0.062500 0.125000 -v 0.531250 0.125000 0.156250 -v 0.562500 0.062500 0.125000 -v 0.531250 0.125000 0.218750 -v 0.562500 0.062500 0.250000 -v 0.562500 0.062500 0.875000 -v 0.531250 0.125000 0.843750 -v 0.562500 0.062500 0.750000 -v 0.531250 0.125000 0.781250 -v 0.437500 0.062500 0.750000 -v 0.468750 0.125000 0.781250 -v 0.468750 0.125000 0.843750 -v 0.437500 0.062500 0.875000 -v 0.531250 0.187500 0.781250 -v 0.562500 0.000000 0.750000 -v 0.531250 0.187500 0.843750 -v 0.562500 0.000000 0.875000 -v 0.468750 0.187500 0.781250 -v 0.437500 0.000000 0.750000 -v 0.468750 0.187500 0.843750 -v 0.437500 0.000000 0.875000 +o busbar_isolators +v 0.062500 -0.437500 0.062500 +v 0.031250 -0.375000 0.031250 +v 0.062500 -0.437500 -0.062500 +v 0.031250 -0.375000 -0.031250 +v -0.062500 -0.437500 -0.062500 +v -0.031250 -0.375000 -0.031250 +v -0.031250 -0.375000 0.031250 +v -0.062500 -0.437500 0.062500 +v 0.031250 -0.312500 -0.031250 +v 0.062500 -0.500000 -0.062500 +v 0.031250 -0.312500 0.031250 +v 0.062500 -0.500000 0.062500 +v -0.031250 -0.312500 -0.031250 +v -0.062500 -0.500000 -0.062500 +v -0.031250 -0.312500 0.031250 +v -0.062500 -0.500000 0.062500 +v -0.375000 -0.500000 0.062500 +v -0.343750 -0.312500 0.031250 +v -0.375000 -0.500000 -0.062500 +v -0.343750 -0.312500 -0.031250 +v -0.250000 -0.500000 0.062500 +v -0.281250 -0.312500 0.031250 +v -0.250000 -0.500000 -0.062500 +v -0.281250 -0.312500 -0.031250 +v -0.375000 -0.437500 0.062500 +v -0.343750 -0.375000 0.031250 +v -0.343750 -0.375000 -0.031250 +v -0.375000 -0.437500 -0.062500 +v -0.281250 -0.375000 -0.031250 +v -0.250000 -0.437500 -0.062500 +v -0.281250 -0.375000 0.031250 +v -0.250000 -0.437500 0.062500 +v 0.375000 -0.437500 0.062500 +v 0.343750 -0.375000 0.031250 +v 0.375000 -0.437500 -0.062500 +v 0.343750 -0.375000 -0.031250 +v 0.250000 -0.437500 -0.062500 +v 0.281250 -0.375000 -0.031250 +v 0.281250 -0.375000 0.031250 +v 0.250000 -0.437500 0.062500 +v 0.343750 -0.312500 -0.031250 +v 0.375000 -0.500000 -0.062500 +v 0.343750 -0.312500 0.031250 +v 0.375000 -0.500000 0.062500 +v 0.281250 -0.312500 -0.031250 +v 0.250000 -0.500000 -0.062500 +v 0.281250 -0.312500 0.031250 +v 0.250000 -0.500000 0.062500 vt 0.125000 0.062500 vt 0.093750 0.125000 vt 0.031250 0.125000 diff --git a/src/main/resources/assets/overengineered/models/block/busbar/obj/busbar_a.obj b/src/main/resources/assets/overengineered/models/block/busbar/obj/busbar_a.obj deleted file mode 100644 index ad3b48b..0000000 --- a/src/main/resources/assets/overengineered/models/block/busbar/obj/busbar_a.obj +++ /dev/null @@ -1,351 +0,0 @@ -# Blender v2.79 (sub 0) OBJ File: 'busbar.blend' -# www.blender.org -mtllib busmaterial.mtl -o busbar_isolators -v 0.562500 0.062500 0.562500 -v 0.531250 0.125000 0.531250 -v 0.562500 0.062500 0.437500 -v 0.531250 0.125000 0.468750 -v 0.437500 0.062500 0.437500 -v 0.468750 0.125000 0.468750 -v 0.468750 0.125000 0.531250 -v 0.437500 0.062500 0.562500 -v 0.531250 0.187500 0.468750 -v 0.562500 0.000000 0.437500 -v 0.531250 0.187500 0.531250 -v 0.562500 0.000000 0.562500 -v 0.468750 0.187500 0.468750 -v 0.437500 0.000000 0.437500 -v 0.468750 0.187500 0.531250 -v 0.437500 0.000000 0.562500 -v 0.125000 0.000000 0.562500 -v 0.156250 0.187500 0.531250 -v 0.125000 0.000000 0.437500 -v 0.156250 0.187500 0.468750 -v 0.250000 0.000000 0.562500 -v 0.218750 0.187500 0.531250 -v 0.250000 0.000000 0.437500 -v 0.218750 0.187500 0.468750 -v 0.125000 0.062500 0.562500 -v 0.156250 0.125000 0.531250 -v 0.156250 0.125000 0.468750 -v 0.125000 0.062500 0.437500 -v 0.218750 0.125000 0.468750 -v 0.250000 0.062500 0.437500 -v 0.218750 0.125000 0.531250 -v 0.250000 0.062500 0.562500 -v 0.875000 0.062500 0.562500 -v 0.843750 0.125000 0.531250 -v 0.875000 0.062500 0.437500 -v 0.843750 0.125000 0.468750 -v 0.750000 0.062500 0.437500 -v 0.781250 0.125000 0.468750 -v 0.781250 0.125000 0.531250 -v 0.750000 0.062500 0.562500 -v 0.843750 0.187500 0.468750 -v 0.875000 0.000000 0.437500 -v 0.843750 0.187500 0.531250 -v 0.875000 0.000000 0.562500 -v 0.781250 0.187500 0.468750 -v 0.750000 0.000000 0.437500 -v 0.781250 0.187500 0.531250 -v 0.750000 0.000000 0.562500 -vt 0.125000 0.062500 -vt 0.093750 0.125000 -vt 0.031250 0.125000 -vt 0.000000 0.062500 -vt 0.125000 0.062500 -vt 0.093750 0.125000 -vt 0.031250 0.125000 -vt 0.000000 0.062500 -vt 0.125000 0.000000 -vt 0.000000 0.000000 -vt 0.125000 0.000000 -vt 0.000000 0.000000 -vt 0.125000 0.000000 -vt 0.125000 0.062500 -vt 0.000000 0.062500 -vt 0.000000 0.000000 -vt 0.125000 0.125000 -vt 0.125000 0.187500 -vt 0.000000 0.187500 -vt 0.000000 0.125000 -vt 0.125000 0.125000 -vt 0.125000 0.187500 -vt 0.000000 0.187500 -vt 0.000000 0.125000 -vt 0.125000 0.125000 -vt 0.125000 0.187500 -vt 0.000000 0.187500 -vt 0.000000 0.125000 -vt 0.125000 0.125000 -vt 0.125000 0.187500 -vt 0.000000 0.187500 -vt 0.000000 0.125000 -vt 0.125000 0.312500 -vt 0.000000 0.312500 -vt 0.000000 0.187500 -vt 0.125000 0.187500 -vt 0.125000 0.125000 -vt 0.125000 0.187500 -vt 0.000000 0.187500 -vt 0.000000 0.125000 -vt 0.125000 0.125000 -vt 0.125000 0.187500 -vt 0.000000 0.187500 -vt 0.000000 0.125000 -vt 0.125000 0.125000 -vt 0.125000 0.187500 -vt 0.000000 0.187500 -vt 0.000000 0.125000 -vt 0.125000 0.125000 -vt 0.125000 0.187500 -vt 0.000000 0.187500 -vt 0.000000 0.125000 -vt 0.125000 0.312500 -vt 0.000000 0.312500 -vt 0.000000 0.187500 -vt 0.125000 0.187500 -vt 0.125000 0.000000 -vt 0.125000 0.062500 -vt 0.000000 0.062500 -vt 0.000000 0.000000 -vt 0.093750 0.125000 -vt 0.031250 0.125000 -vt 0.125000 0.000000 -vt 0.125000 0.062500 -vt 0.000000 0.062500 -vt 0.000000 0.000000 -vt 0.093750 0.125000 -vt 0.031250 0.125000 -vt 0.125000 0.000000 -vt 0.125000 0.062500 -vt 0.000000 0.062500 -vt 0.000000 0.000000 -vt 0.093750 0.125000 -vt 0.031250 0.125000 -vt 0.125000 0.000000 -vt 0.125000 0.062500 -vt 0.000000 0.062500 -vt 0.000000 0.000000 -vt 0.093750 0.125000 -vt 0.031250 0.125000 -vt 0.093750 0.125000 -vt 0.031250 0.125000 -vt 0.125000 0.000000 -vt 0.125000 0.062500 -vt 0.000000 0.062500 -vt 0.000000 0.000000 -vt 0.093750 0.125000 -vt 0.031250 0.125000 -vt 0.125000 0.062500 -vt 0.093750 0.125000 -vt 0.031250 0.125000 -vt 0.000000 0.062500 -vt 0.125000 0.062500 -vt 0.093750 0.125000 -vt 0.031250 0.125000 -vt 0.000000 0.062500 -vt 0.125000 0.000000 -vt 0.000000 0.000000 -vt 0.125000 0.000000 -vt 0.000000 0.000000 -vt 0.125000 0.000000 -vt 0.125000 0.062500 -vt 0.000000 0.062500 -vt 0.000000 0.000000 -vt 0.125000 0.125000 -vt 0.125000 0.187500 -vt 0.000000 0.187500 -vt 0.000000 0.125000 -vt 0.125000 0.125000 -vt 0.125000 0.187500 -vt 0.000000 0.187500 -vt 0.000000 0.125000 -vt 0.125000 0.125000 -vt 0.125000 0.187500 -vt 0.000000 0.187500 -vt 0.000000 0.125000 -vt 0.125000 0.125000 -vt 0.125000 0.187500 -vt 0.000000 0.187500 -vt 0.000000 0.125000 -vt 0.125000 0.312500 -vt 0.000000 0.312500 -vt 0.000000 0.187500 -vt 0.125000 0.187500 -vt 0.093750 0.125000 -vt 0.031250 0.125000 -vt 0.125000 0.000000 -vt 0.125000 0.062500 -vt 0.000000 0.062500 -vt 0.000000 0.000000 -vt 0.093750 0.125000 -vt 0.031250 0.125000 -vn 0.8944 0.4472 0.0000 -vn 0.0000 0.4472 0.8944 -vn 0.0000 0.0000 1.0000 -vn 1.0000 0.0000 0.0000 -vn 0.0000 0.0000 -1.0000 -vn -1.0000 0.0000 0.0000 -vn 0.0000 -1.0000 0.0000 -vn 0.0000 0.4472 -0.8944 -vn -0.8944 0.4472 0.0000 -usemtl None -s off -f 3/1/1 4/2/1 2/3/1 1/4/1 -f 1/5/2 2/6/2 7/7/2 8/8/2 -f 12/9/3 1/5/3 8/8/3 16/10/3 -f 10/11/4 3/1/4 1/4/4 12/12/4 -f 14/13/5 5/14/5 3/15/5 10/16/5 -f 2/17/3 11/18/3 15/19/3 7/20/3 -f 6/21/5 13/22/5 9/23/5 4/24/5 -f 7/25/6 15/26/6 13/27/6 6/28/6 -f 4/29/4 9/30/4 11/31/4 2/32/4 -f 14/33/7 10/34/7 12/35/7 16/36/7 -f 26/37/6 18/38/6 20/39/6 27/40/6 -f 27/41/5 20/42/5 24/43/5 29/44/5 -f 29/45/4 24/46/4 22/47/4 31/48/4 -f 31/49/3 22/50/3 18/51/3 26/52/3 -f 19/53/7 23/54/7 21/55/7 17/56/7 -f 21/57/3 32/58/3 25/59/3 17/60/3 -f 32/58/2 31/61/2 26/62/2 25/59/2 -f 23/63/4 30/64/4 32/65/4 21/66/4 -f 30/64/1 29/67/1 31/68/1 32/65/1 -f 19/69/5 28/70/5 30/71/5 23/72/5 -f 28/70/8 27/73/8 29/74/8 30/71/8 -f 17/75/6 25/76/6 28/77/6 19/78/6 -f 25/76/9 26/79/9 27/80/9 28/77/9 -f 5/14/8 6/81/8 4/82/8 3/15/8 -f 16/83/6 8/84/6 5/85/6 14/86/6 -f 8/84/9 7/87/9 6/88/9 5/85/9 -f 35/89/1 36/90/1 34/91/1 33/92/1 -f 33/93/2 34/94/2 39/95/2 40/96/2 -f 44/97/3 33/93/3 40/96/3 48/98/3 -f 42/99/4 35/89/4 33/92/4 44/100/4 -f 46/101/5 37/102/5 35/103/5 42/104/5 -f 34/105/3 43/106/3 47/107/3 39/108/3 -f 38/109/5 45/110/5 41/111/5 36/112/5 -f 39/113/6 47/114/6 45/115/6 38/116/6 -f 36/117/4 41/118/4 43/119/4 34/120/4 -f 46/121/7 42/122/7 44/123/7 48/124/7 -f 37/102/8 38/125/8 36/126/8 35/103/8 -f 48/127/6 40/128/6 37/129/6 46/130/6 -f 40/128/9 39/131/9 38/132/9 37/129/9 -o busbar -v 0.437500 0.187500 1.000000 -v 0.437500 0.250000 1.000000 -v 0.437500 0.187500 0.000000 -v 0.437500 0.250000 0.000000 -v 0.562500 0.187500 1.000000 -v 0.562500 0.250000 1.000000 -v 0.562500 0.187500 0.000000 -v 0.562500 0.250000 0.000000 -v 0.125000 0.187500 1.000000 -v 0.125000 0.250000 1.000000 -v 0.125000 0.187500 0.000000 -v 0.125000 0.250000 0.000000 -v 0.250000 0.187500 1.000000 -v 0.250000 0.250000 1.000000 -v 0.250000 0.187500 0.000000 -v 0.250000 0.250000 0.000000 -v 0.750000 0.187500 1.000000 -v 0.750000 0.250000 1.000000 -v 0.750000 0.187500 0.000000 -v 0.750000 0.250000 0.000000 -v 0.875000 0.187500 1.000000 -v 0.875000 0.250000 1.000000 -v 0.875000 0.187500 0.000000 -v 0.875000 0.250000 0.000000 -vt 0.437500 0.812500 -vt 0.437500 0.875000 -vt 0.312500 0.875000 -vt 0.312500 0.812500 -vt 0.687500 0.812500 -vt 0.687500 0.875000 -vt 0.562500 0.875000 -vt 0.562500 0.812500 -vt 0.000000 1.000000 -vt 0.000000 0.875000 -vt 1.000000 0.875000 -vt 1.000000 1.000000 -vt 0.000000 0.812500 -vt 1.000000 0.812500 -vt 1.000000 0.875000 -vt 0.000000 0.875000 -vt 0.000000 0.812500 -vt 1.000000 0.812500 -vt 1.000000 0.875000 -vt 0.000000 0.875000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.437500 0.812500 -vt 0.437500 0.875000 -vt 0.312500 0.875000 -vt 0.312500 0.812500 -vt 0.687500 0.812500 -vt 0.687500 0.875000 -vt 0.562500 0.875000 -vt 0.562500 0.812500 -vt 0.000000 1.000000 -vt 0.000000 0.875000 -vt 1.000000 0.875000 -vt 1.000000 1.000000 -vt 0.000000 0.812500 -vt 1.000000 0.812500 -vt 1.000000 0.875000 -vt 0.000000 0.875000 -vt 0.000000 0.812500 -vt 1.000000 0.812500 -vt 1.000000 0.875000 -vt 0.000000 0.875000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.437500 0.812500 -vt 0.437500 0.875000 -vt 0.312500 0.875000 -vt 0.312500 0.812500 -vt 0.687500 0.812500 -vt 0.687500 0.875000 -vt 0.562500 0.875000 -vt 0.562500 0.812500 -vt 0.000000 1.000000 -vt 0.000000 0.875000 -vt 1.000000 0.875000 -vt 1.000000 1.000000 -vt 0.000000 0.812500 -vt 1.000000 0.812500 -vt 1.000000 0.875000 -vt 0.000000 0.875000 -vt 0.000000 0.812500 -vt 1.000000 0.812500 -vt 1.000000 0.875000 -vt 0.000000 0.875000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vn 0.0000 0.0000 -1.0000 -vn 0.0000 0.0000 1.0000 -vn 0.0000 -1.0000 0.0000 -vn -1.0000 0.0000 0.0000 -vn 1.0000 0.0000 0.0000 -vn 0.0000 1.0000 0.0000 -usemtl None -s off -f 51/133/10 52/134/10 56/135/10 55/136/10 -f 53/137/11 54/138/11 50/139/11 49/140/11 -f 53/141/12 49/142/12 51/143/12 55/144/12 -f 51/145/13 49/146/13 50/147/13 52/148/13 -f 53/149/14 55/150/14 56/151/14 54/152/14 -f 56/151/15 52/153/15 50/154/15 54/152/15 -f 59/155/10 60/156/10 64/157/10 63/158/10 -f 61/159/11 62/160/11 58/161/11 57/162/11 -f 61/163/12 57/164/12 59/165/12 63/166/12 -f 59/167/13 57/168/13 58/169/13 60/170/13 -f 61/171/14 63/172/14 64/173/14 62/174/14 -f 64/173/15 60/175/15 58/176/15 62/174/15 -f 67/177/10 68/178/10 72/179/10 71/180/10 -f 69/181/11 70/182/11 66/183/11 65/184/11 -f 69/185/12 65/186/12 67/187/12 71/188/12 -f 67/189/13 65/190/13 66/191/13 68/192/13 -f 69/193/14 71/194/14 72/195/14 70/196/14 -f 72/195/15 68/197/15 66/198/15 70/196/15 diff --git a/src/main/resources/assets/overengineered/models/block/busbar/obj/busbar_b.obj b/src/main/resources/assets/overengineered/models/block/busbar/obj/busbar_b.obj deleted file mode 100644 index d5bdc8a..0000000 --- a/src/main/resources/assets/overengineered/models/block/busbar/obj/busbar_b.obj +++ /dev/null @@ -1,120 +0,0 @@ -# Blender v2.79 (sub 0) OBJ File: 'busbar.blend' -# www.blender.org -mtllib busmaterial.mtl -o busbar -v 0.437500 0.187500 1.000000 -v 0.437500 0.250000 1.000000 -v 0.437500 0.187500 0.000000 -v 0.437500 0.250000 0.000000 -v 0.562500 0.187500 1.000000 -v 0.562500 0.250000 1.000000 -v 0.562500 0.187500 0.000000 -v 0.562500 0.250000 0.000000 -v 0.125000 0.187500 1.000000 -v 0.125000 0.250000 1.000000 -v 0.125000 0.187500 0.000000 -v 0.125000 0.250000 0.000000 -v 0.250000 0.187500 1.000000 -v 0.250000 0.250000 1.000000 -v 0.250000 0.187500 0.000000 -v 0.250000 0.250000 0.000000 -v 0.750000 0.187500 1.000000 -v 0.750000 0.250000 1.000000 -v 0.750000 0.187500 0.000000 -v 0.750000 0.250000 0.000000 -v 0.875000 0.187500 1.000000 -v 0.875000 0.250000 1.000000 -v 0.875000 0.187500 0.000000 -v 0.875000 0.250000 0.000000 -vt 0.437500 0.812500 -vt 0.437500 0.875000 -vt 0.312500 0.875000 -vt 0.312500 0.812500 -vt 0.687500 0.812500 -vt 0.687500 0.875000 -vt 0.562500 0.875000 -vt 0.562500 0.812500 -vt 0.000000 1.000000 -vt 0.000000 0.875000 -vt 1.000000 0.875000 -vt 1.000000 1.000000 -vt 0.000000 0.812500 -vt 1.000000 0.812500 -vt 1.000000 0.875000 -vt 0.000000 0.875000 -vt 0.000000 0.812500 -vt 1.000000 0.812500 -vt 1.000000 0.875000 -vt 0.000000 0.875000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.437500 0.812500 -vt 0.437500 0.875000 -vt 0.312500 0.875000 -vt 0.312500 0.812500 -vt 0.687500 0.812500 -vt 0.687500 0.875000 -vt 0.562500 0.875000 -vt 0.562500 0.812500 -vt 0.000000 1.000000 -vt 0.000000 0.875000 -vt 1.000000 0.875000 -vt 1.000000 1.000000 -vt 0.000000 0.812500 -vt 1.000000 0.812500 -vt 1.000000 0.875000 -vt 0.000000 0.875000 -vt 0.000000 0.812500 -vt 1.000000 0.812500 -vt 1.000000 0.875000 -vt 0.000000 0.875000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.437500 0.812500 -vt 0.437500 0.875000 -vt 0.312500 0.875000 -vt 0.312500 0.812500 -vt 0.687500 0.812500 -vt 0.687500 0.875000 -vt 0.562500 0.875000 -vt 0.562500 0.812500 -vt 0.000000 1.000000 -vt 0.000000 0.875000 -vt 1.000000 0.875000 -vt 1.000000 1.000000 -vt 0.000000 0.812500 -vt 1.000000 0.812500 -vt 1.000000 0.875000 -vt 0.000000 0.875000 -vt 0.000000 0.812500 -vt 1.000000 0.812500 -vt 1.000000 0.875000 -vt 0.000000 0.875000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vn 0.0000 0.0000 -1.0000 -vn 0.0000 0.0000 1.0000 -vn 0.0000 -1.0000 0.0000 -vn -1.0000 0.0000 0.0000 -vn 1.0000 0.0000 0.0000 -vn 0.0000 1.0000 0.0000 -usemtl None -s off -f 3/1/1 4/2/1 8/3/1 7/4/1 -f 5/5/2 6/6/2 2/7/2 1/8/2 -f 5/9/3 1/10/3 3/11/3 7/12/3 -f 3/13/4 1/14/4 2/15/4 4/16/4 -f 5/17/5 7/18/5 8/19/5 6/20/5 -f 8/19/6 4/21/6 2/22/6 6/20/6 -f 11/23/1 12/24/1 16/25/1 15/26/1 -f 13/27/2 14/28/2 10/29/2 9/30/2 -f 13/31/3 9/32/3 11/33/3 15/34/3 -f 11/35/4 9/36/4 10/37/4 12/38/4 -f 13/39/5 15/40/5 16/41/5 14/42/5 -f 16/41/6 12/43/6 10/44/6 14/42/6 -f 19/45/1 20/46/1 24/47/1 23/48/1 -f 21/49/2 22/50/2 18/51/2 17/52/2 -f 21/53/3 17/54/3 19/55/3 23/56/3 -f 19/57/4 17/58/4 18/59/4 20/60/4 -f 21/61/5 23/62/5 24/63/5 22/64/5 -f 24/63/6 20/65/6 18/66/6 22/64/6 diff --git a/src/main/resources/assets/overengineered/models/block/busbar/obj/busbar_b_alt.obj b/src/main/resources/assets/overengineered/models/block/busbar/obj/busbar_b_alt.obj deleted file mode 100644 index 0603a03..0000000 --- a/src/main/resources/assets/overengineered/models/block/busbar/obj/busbar_b_alt.obj +++ /dev/null @@ -1,120 +0,0 @@ -# Blender v2.79 (sub 0) OBJ File: 'busbar.blend' -# www.blender.org -mtllib busmaterial.mtl -o busbar_alt -v 0.000000 0.187500 0.437500 -v 0.000000 0.250000 0.437500 -v 1.000000 0.187500 0.437500 -v 1.000000 0.250000 0.437500 -v 0.000000 0.187500 0.562500 -v 0.000000 0.250000 0.562500 -v 1.000000 0.187500 0.562500 -v 1.000000 0.250000 0.562500 -v 0.000000 0.187500 0.125000 -v 0.000000 0.250000 0.125000 -v 1.000000 0.187500 0.125000 -v 1.000000 0.250000 0.125000 -v 0.000000 0.187500 0.250000 -v 0.000000 0.250000 0.250000 -v 1.000000 0.187500 0.250000 -v 1.000000 0.250000 0.250000 -v 0.000000 0.187500 0.750000 -v 0.000000 0.250000 0.750000 -v 1.000000 0.187500 0.750000 -v 1.000000 0.250000 0.750000 -v 0.000000 0.187500 0.875000 -v 0.000000 0.250000 0.875000 -v 1.000000 0.187500 0.875000 -v 1.000000 0.250000 0.875000 -vt 0.437500 0.812500 -vt 0.437500 0.875000 -vt 0.312500 0.875000 -vt 0.312500 0.812500 -vt 0.687500 0.812500 -vt 0.687500 0.875000 -vt 0.562500 0.875000 -vt 0.562500 0.812500 -vt 0.000000 1.000000 -vt 0.000000 0.875000 -vt 1.000000 0.875000 -vt 1.000000 1.000000 -vt 0.000000 0.812500 -vt 1.000000 0.812500 -vt 1.000000 0.875000 -vt 0.000000 0.875000 -vt 0.000000 0.812500 -vt 1.000000 0.812500 -vt 1.000000 0.875000 -vt 0.000000 0.875000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.437500 0.812500 -vt 0.437500 0.875000 -vt 0.312500 0.875000 -vt 0.312500 0.812500 -vt 0.687500 0.812500 -vt 0.687500 0.875000 -vt 0.562500 0.875000 -vt 0.562500 0.812500 -vt 0.000000 1.000000 -vt 0.000000 0.875000 -vt 1.000000 0.875000 -vt 1.000000 1.000000 -vt 0.000000 0.812500 -vt 1.000000 0.812500 -vt 1.000000 0.875000 -vt 0.000000 0.875000 -vt 0.000000 0.812500 -vt 1.000000 0.812500 -vt 1.000000 0.875000 -vt 0.000000 0.875000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 0.437500 0.812500 -vt 0.437500 0.875000 -vt 0.312500 0.875000 -vt 0.312500 0.812500 -vt 0.687500 0.812500 -vt 0.687500 0.875000 -vt 0.562500 0.875000 -vt 0.562500 0.812500 -vt 0.000000 1.000000 -vt 0.000000 0.875000 -vt 1.000000 0.875000 -vt 1.000000 1.000000 -vt 0.000000 0.812500 -vt 1.000000 0.812500 -vt 1.000000 0.875000 -vt 0.000000 0.875000 -vt 0.000000 0.812500 -vt 1.000000 0.812500 -vt 1.000000 0.875000 -vt 0.000000 0.875000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vn 1.0000 0.0000 0.0000 -vn -1.0000 0.0000 0.0000 -vn 0.0000 -1.0000 0.0000 -vn 0.0000 0.0000 -1.0000 -vn 0.0000 0.0000 1.0000 -vn 0.0000 1.0000 0.0000 -usemtl None -s off -f 3/1/1 4/2/1 8/3/1 7/4/1 -f 5/5/2 6/6/2 2/7/2 1/8/2 -f 5/9/3 1/10/3 3/11/3 7/12/3 -f 3/13/4 1/14/4 2/15/4 4/16/4 -f 5/17/5 7/18/5 8/19/5 6/20/5 -f 8/19/6 4/21/6 2/22/6 6/20/6 -f 11/23/1 12/24/1 16/25/1 15/26/1 -f 13/27/2 14/28/2 10/29/2 9/30/2 -f 13/31/3 9/32/3 11/33/3 15/34/3 -f 11/35/4 9/36/4 10/37/4 12/38/4 -f 13/39/5 15/40/5 16/41/5 14/42/5 -f 16/41/6 12/43/6 10/44/6 14/42/6 -f 19/45/1 20/46/1 24/47/1 23/48/1 -f 21/49/2 22/50/2 18/51/2 17/52/2 -f 21/53/3 17/54/3 19/55/3 23/56/3 -f 19/57/4 17/58/4 18/59/4 20/60/4 -f 21/61/5 23/62/5 24/63/5 22/64/5 -f 24/63/6 20/65/6 18/66/6 22/64/6 diff --git a/src/main/resources/assets/overengineered/models/block/busbar/obj/busbar_bend.obj b/src/main/resources/assets/overengineered/models/block/busbar/obj/busbar_bend.obj index 04c293b..d2b5032 100644 --- a/src/main/resources/assets/overengineered/models/block/busbar/obj/busbar_bend.obj +++ b/src/main/resources/assets/overengineered/models/block/busbar/obj/busbar_bend.obj @@ -2,54 +2,54 @@ # www.blender.org mtllib busmaterial.mtl o busbar_bend -v 0.437500 0.187500 0.562500 -v 0.437500 0.187500 0.000000 -v 0.437500 0.250000 0.000000 -v 0.562500 0.250000 0.562500 -v 0.562500 0.250000 0.000000 -v 0.125000 0.187500 0.250000 -v 0.125000 0.250000 0.250000 -v 0.125000 0.250000 0.000000 -v 0.250000 0.250000 0.250000 -v 0.250000 0.187500 0.000000 -v 0.250000 0.250000 0.000000 -v 0.750000 0.250000 0.000000 -v 0.875000 0.187500 0.000000 -v 0.875000 0.250000 0.000000 -v 0.562500 0.187500 0.562500 -v 0.000000 0.250000 0.562500 -v 0.000000 0.250000 0.437500 -v 0.250000 0.187500 0.250000 -v 0.000000 0.187500 0.250000 -v 0.000000 0.250000 0.250000 -v 0.000000 0.250000 0.125000 -v 0.875000 0.187500 0.875000 -v 0.875000 0.250000 0.875000 -v 0.875000 0.187500 0.750000 -v 0.875000 0.250000 0.750000 -v 0.750000 0.187500 0.750000 -v 0.750000 0.187500 0.875000 -v 0.750000 0.250000 0.875000 -v 0.750000 0.250000 0.750000 -v 0.437500 0.250000 0.562500 -v 0.437500 0.250000 0.437500 -v 0.562500 0.187500 0.437500 -v 0.562500 0.250000 0.437500 -v 0.437500 0.187500 0.437500 -v 0.125000 0.187500 0.125000 -v 0.250000 0.187500 0.125000 -v 0.250000 0.250000 0.125000 -v 0.125000 0.250000 0.125000 -v 0.000000 0.187500 0.562500 -v 0.000000 0.187500 0.750000 -v 0.000000 0.187500 0.875000 -v 0.000000 0.250000 0.875000 -v 0.000000 0.250000 0.750000 -v 0.000000 0.187500 0.437500 -v 0.000000 0.187500 0.125000 -v 0.125000 0.187500 0.000000 -v 0.562500 0.187500 0.000000 -v 0.750000 0.187500 0.000000 +v -0.062500 -0.312500 0.062500 +v -0.062500 -0.312500 -0.500000 +v -0.062500 -0.250000 -0.500000 +v 0.062500 -0.250000 0.062500 +v 0.062500 -0.250000 -0.500000 +v -0.375000 -0.312500 -0.250000 +v -0.375000 -0.250000 -0.250000 +v -0.375000 -0.250000 -0.500000 +v -0.250000 -0.250000 -0.250000 +v -0.250000 -0.312500 -0.500000 +v -0.250000 -0.250000 -0.500000 +v 0.250000 -0.250000 -0.500000 +v 0.375000 -0.312500 -0.500000 +v 0.375000 -0.250000 -0.500000 +v 0.062500 -0.312500 0.062500 +v -0.500000 -0.250000 0.062500 +v -0.500000 -0.250000 -0.062500 +v -0.250000 -0.312500 -0.250000 +v -0.500000 -0.312500 -0.250000 +v -0.500000 -0.250000 -0.250000 +v -0.500000 -0.250000 -0.375000 +v 0.375000 -0.312500 0.375000 +v 0.375000 -0.250000 0.375000 +v 0.375000 -0.312500 0.250000 +v 0.375000 -0.250000 0.250000 +v 0.250000 -0.312500 0.250000 +v 0.250000 -0.312500 0.375000 +v 0.250000 -0.250000 0.375000 +v 0.250000 -0.250000 0.250000 +v -0.062500 -0.250000 0.062500 +v -0.062500 -0.250000 -0.062500 +v 0.062500 -0.312500 -0.062500 +v 0.062500 -0.250000 -0.062500 +v -0.062500 -0.312500 -0.062500 +v -0.375000 -0.312500 -0.375000 +v -0.250000 -0.312500 -0.375000 +v -0.250000 -0.250000 -0.375000 +v -0.375000 -0.250000 -0.375000 +v -0.500000 -0.312500 0.062500 +v -0.500000 -0.312500 0.250000 +v -0.500000 -0.312500 0.375000 +v -0.500000 -0.250000 0.375000 +v -0.500000 -0.250000 0.250000 +v -0.500000 -0.312500 -0.062500 +v -0.500000 -0.312500 -0.375000 +v -0.375000 -0.312500 -0.500000 +v 0.062500 -0.312500 -0.500000 +v 0.250000 -0.312500 -0.500000 vt 0.687500 0.812500 vt 0.687500 0.875000 vt 0.562500 0.875000 @@ -193,7 +193,7 @@ vn 0.0000 -0.0000 1.0000 vn 0.0000 -1.0000 0.0000 vn 1.0000 0.0000 0.0000 vn -1.0000 0.0000 0.0000 -vn -0.0000 -0.0000 -1.0000 +vn 0.0000 -0.0000 -1.0000 vn 0.0000 1.0000 0.0000 usemtl None s off @@ -240,54 +240,54 @@ f 10/128/5 46/129/5 8/130/5 11/131/5 f 47/132/5 2/133/5 3/134/5 5/135/5 f 13/136/5 48/137/5 12/138/5 14/139/5 o busbar_insulators_corner -v 0.562500 0.062500 0.562500 -v 0.531250 0.125000 0.531250 -v 0.562500 0.062500 0.437500 -v 0.531250 0.125000 0.468750 -v 0.437500 0.062500 0.437500 -v 0.468750 0.125000 0.468750 -v 0.468750 0.125000 0.531250 -v 0.437500 0.062500 0.562500 -v 0.531250 0.187500 0.468750 -v 0.562500 0.000000 0.437500 -v 0.531250 0.187500 0.531250 -v 0.562500 0.000000 0.562500 -v 0.468750 0.187500 0.468750 -v 0.437500 0.000000 0.437500 -v 0.468750 0.187500 0.531250 -v 0.437500 0.000000 0.562500 -v 0.125000 0.000000 0.250000 -v 0.156250 0.187500 0.218750 -v 0.125000 0.000000 0.125000 -v 0.156250 0.187500 0.156250 -v 0.250000 0.000000 0.250000 -v 0.218750 0.187500 0.218750 -v 0.250000 0.000000 0.125000 -v 0.218750 0.187500 0.156250 -v 0.125000 0.062500 0.250000 -v 0.156250 0.125000 0.218750 -v 0.156250 0.125000 0.156250 -v 0.125000 0.062500 0.125000 -v 0.218750 0.125000 0.156250 -v 0.250000 0.062500 0.125000 -v 0.218750 0.125000 0.218750 -v 0.250000 0.062500 0.250000 -v 0.875000 0.062500 0.875000 -v 0.843750 0.125000 0.843750 -v 0.875000 0.062500 0.750000 -v 0.843750 0.125000 0.781250 -v 0.750000 0.062500 0.750000 -v 0.781250 0.125000 0.781250 -v 0.781250 0.125000 0.843750 -v 0.750000 0.062500 0.875000 -v 0.843750 0.187500 0.781250 -v 0.875000 0.000000 0.750000 -v 0.843750 0.187500 0.843750 -v 0.875000 0.000000 0.875000 -v 0.781250 0.187500 0.781250 -v 0.750000 0.000000 0.750000 -v 0.781250 0.187500 0.843750 -v 0.750000 0.000000 0.875000 +v 0.062500 -0.437500 0.062500 +v 0.031250 -0.375000 0.031250 +v 0.062500 -0.437500 -0.062500 +v 0.031250 -0.375000 -0.031250 +v -0.062500 -0.437500 -0.062500 +v -0.031250 -0.375000 -0.031250 +v -0.031250 -0.375000 0.031250 +v -0.062500 -0.437500 0.062500 +v 0.031250 -0.312500 -0.031250 +v 0.062500 -0.500000 -0.062500 +v 0.031250 -0.312500 0.031250 +v 0.062500 -0.500000 0.062500 +v -0.031250 -0.312500 -0.031250 +v -0.062500 -0.500000 -0.062500 +v -0.031250 -0.312500 0.031250 +v -0.062500 -0.500000 0.062500 +v -0.375000 -0.500000 -0.250000 +v -0.343750 -0.312500 -0.281250 +v -0.375000 -0.500000 -0.375000 +v -0.343750 -0.312500 -0.343750 +v -0.250000 -0.500000 -0.250000 +v -0.281250 -0.312500 -0.281250 +v -0.250000 -0.500000 -0.375000 +v -0.281250 -0.312500 -0.343750 +v -0.375000 -0.437500 -0.250000 +v -0.343750 -0.375000 -0.281250 +v -0.343750 -0.375000 -0.343750 +v -0.375000 -0.437500 -0.375000 +v -0.281250 -0.375000 -0.343750 +v -0.250000 -0.437500 -0.375000 +v -0.281250 -0.375000 -0.281250 +v -0.250000 -0.437500 -0.250000 +v 0.375000 -0.437500 0.375000 +v 0.343750 -0.375000 0.343750 +v 0.375000 -0.437500 0.250000 +v 0.343750 -0.375000 0.281250 +v 0.250000 -0.437500 0.250000 +v 0.281250 -0.375000 0.281250 +v 0.281250 -0.375000 0.343750 +v 0.250000 -0.437500 0.375000 +v 0.343750 -0.312500 0.281250 +v 0.375000 -0.500000 0.250000 +v 0.343750 -0.312500 0.343750 +v 0.375000 -0.500000 0.375000 +v 0.281250 -0.312500 0.281250 +v 0.250000 -0.500000 0.250000 +v 0.281250 -0.312500 0.343750 +v 0.250000 -0.500000 0.375000 vt 0.125000 0.062500 vt 0.093750 0.125000 vt 0.031250 0.125000 diff --git a/src/main/resources/assets/overengineered/models/block/busbar/obj/busbar_edge_inside.obj b/src/main/resources/assets/overengineered/models/block/busbar/obj/busbar_edge_inside.obj index f931996..cf0d05d 100644 --- a/src/main/resources/assets/overengineered/models/block/busbar/obj/busbar_edge_inside.obj +++ b/src/main/resources/assets/overengineered/models/block/busbar/obj/busbar_edge_inside.obj @@ -2,54 +2,54 @@ # www.blender.org mtllib busmaterial.mtl o busbar_edge_inside -v 0.437500 0.187500 0.812500 -v 0.437500 0.250000 0.812500 -v 0.437500 0.187500 0.000000 -v 0.437500 0.250000 0.000000 -v 0.562500 0.187500 0.812500 -v 0.562500 0.250000 0.812500 -v 0.562500 0.187500 0.000000 -v 0.562500 0.250000 0.000000 -v 0.562500 1.000000 0.812500 -v 0.562500 1.000000 0.750000 -v 0.437500 1.000000 0.812500 -v 0.437500 1.000000 0.750000 -v 0.562500 0.250000 0.750000 -v 0.437500 0.250000 0.750000 -v 0.562500 0.187500 0.750000 -v 0.437500 0.187500 0.750000 -v 0.125000 0.187500 0.812500 -v 0.125000 0.250000 0.812500 -v 0.125000 0.187500 0.000000 -v 0.125000 0.250000 0.000000 -v 0.250000 0.187500 0.812500 -v 0.250000 0.250000 0.812500 -v 0.250000 0.187500 0.000000 -v 0.250000 0.250000 0.000000 -v 0.250000 1.000000 0.812500 -v 0.250000 1.000000 0.750000 -v 0.125000 1.000000 0.812500 -v 0.125000 1.000000 0.750000 -v 0.250000 0.250000 0.750000 -v 0.125000 0.250000 0.750000 -v 0.250000 0.187500 0.750000 -v 0.125000 0.187500 0.750000 -v 0.750000 0.187500 0.812500 -v 0.750000 0.250000 0.812500 -v 0.750000 0.187500 0.000000 -v 0.750000 0.250000 0.000000 -v 0.875000 0.187500 0.812500 -v 0.875000 0.250000 0.812500 -v 0.875000 0.187500 0.000000 -v 0.875000 0.250000 0.000000 -v 0.875000 1.000000 0.812500 -v 0.875000 1.000000 0.750000 -v 0.750000 1.000000 0.812500 -v 0.750000 1.000000 0.750000 -v 0.875000 0.250000 0.750000 -v 0.750000 0.250000 0.750000 -v 0.875000 0.187500 0.750000 -v 0.750000 0.187500 0.750000 +v -0.062500 -0.312500 0.312500 +v -0.062500 -0.250000 0.312500 +v -0.062500 -0.312500 -0.500000 +v -0.062500 -0.250000 -0.500000 +v 0.062500 -0.312500 0.312500 +v 0.062500 -0.250000 0.312500 +v 0.062500 -0.312500 -0.500000 +v 0.062500 -0.250000 -0.500000 +v 0.062500 0.500000 0.312500 +v 0.062500 0.500000 0.250000 +v -0.062500 0.500000 0.312500 +v -0.062500 0.500000 0.250000 +v 0.062500 -0.250000 0.250000 +v -0.062500 -0.250000 0.250000 +v 0.062500 -0.312500 0.250000 +v -0.062500 -0.312500 0.250000 +v -0.375000 -0.312500 0.312500 +v -0.375000 -0.250000 0.312500 +v -0.375000 -0.312500 -0.500000 +v -0.375000 -0.250000 -0.500000 +v -0.250000 -0.312500 0.312500 +v -0.250000 -0.250000 0.312500 +v -0.250000 -0.312500 -0.500000 +v -0.250000 -0.250000 -0.500000 +v -0.250000 0.500000 0.312500 +v -0.250000 0.500000 0.250000 +v -0.375000 0.500000 0.312500 +v -0.375000 0.500000 0.250000 +v -0.250000 -0.250000 0.250000 +v -0.375000 -0.250000 0.250000 +v -0.250000 -0.312500 0.250000 +v -0.375000 -0.312500 0.250000 +v 0.250000 -0.312500 0.312500 +v 0.250000 -0.250000 0.312500 +v 0.250000 -0.312500 -0.500000 +v 0.250000 -0.250000 -0.500000 +v 0.375000 -0.312500 0.312500 +v 0.375000 -0.250000 0.312500 +v 0.375000 -0.312500 -0.500000 +v 0.375000 -0.250000 -0.500000 +v 0.375000 0.500000 0.312500 +v 0.375000 0.500000 0.250000 +v 0.250000 0.500000 0.312500 +v 0.250000 0.500000 0.250000 +v 0.375000 -0.250000 0.250000 +v 0.250000 -0.250000 0.250000 +v 0.375000 -0.312500 0.250000 +v 0.250000 -0.312500 0.250000 vt 0.687500 0.812500 vt 0.687500 0.875000 vt 0.562500 0.875000 @@ -241,55 +241,55 @@ f 35/129/2 48/130/2 46/131/2 36/132/2 f 33/133/4 48/134/4 47/135/4 37/136/4 f 44/137/3 43/138/3 41/139/3 42/140/3 f 37/141/5 47/142/5 45/143/5 38/144/5 -o busbar_isolators.001_busbar_isolators -v 0.562500 0.062500 0.562500 -v 0.531250 0.125000 0.531250 -v 0.562500 0.062500 0.437500 -v 0.531250 0.125000 0.468750 -v 0.437500 0.062500 0.437500 -v 0.468750 0.125000 0.468750 -v 0.468750 0.125000 0.531250 -v 0.437500 0.062500 0.562500 -v 0.531250 0.187500 0.468750 -v 0.562500 0.000000 0.437500 -v 0.531250 0.187500 0.531250 -v 0.562500 0.000000 0.562500 -v 0.468750 0.187500 0.468750 -v 0.437500 0.000000 0.437500 -v 0.468750 0.187500 0.531250 -v 0.437500 0.000000 0.562500 -v 0.125000 0.000000 0.562500 -v 0.156250 0.187500 0.531250 -v 0.125000 0.000000 0.437500 -v 0.156250 0.187500 0.468750 -v 0.250000 0.000000 0.562500 -v 0.218750 0.187500 0.531250 -v 0.250000 0.000000 0.437500 -v 0.218750 0.187500 0.468750 -v 0.125000 0.062500 0.562500 -v 0.156250 0.125000 0.531250 -v 0.156250 0.125000 0.468750 -v 0.125000 0.062500 0.437500 -v 0.218750 0.125000 0.468750 +o busbar_isolators_side_busbar_isolators +v 0.062500 0.062500 0.437500 +v 0.031250 0.031250 0.375000 +v 0.062500 -0.062500 0.437500 +v 0.031250 -0.031250 0.375000 +v -0.062500 -0.062500 0.437500 +v -0.031250 -0.031250 0.375000 +v -0.031250 0.031250 0.375000 +v -0.062500 0.062500 0.437500 +v 0.031250 -0.031250 0.312500 +v 0.062500 -0.062500 0.500000 +v 0.031250 0.031250 0.312500 +v 0.062500 0.062500 0.500000 +v -0.031250 -0.031250 0.312500 +v -0.062500 -0.062500 0.500000 +v -0.031250 0.031250 0.312500 +v -0.062500 0.062500 0.500000 +v -0.375000 0.062500 0.500000 +v -0.343750 0.031250 0.312500 +v -0.375000 -0.062500 0.500000 +v -0.343750 -0.031250 0.312500 +v -0.250000 0.062500 0.500000 +v -0.281250 0.031250 0.312500 +v -0.250000 -0.062500 0.500000 +v -0.281250 -0.031250 0.312500 +v -0.375000 0.062500 0.437500 +v -0.343750 0.031250 0.375000 +v -0.343750 -0.031250 0.375000 +v -0.375000 -0.062500 0.437500 +v -0.281250 -0.031250 0.375000 +v -0.250000 -0.062500 0.437500 +v -0.281250 0.031250 0.375000 +v -0.250000 0.062500 0.437500 +v 0.375000 0.062500 0.437500 +v 0.343750 0.031250 0.375000 +v 0.375000 -0.062500 0.437500 +v 0.343750 -0.031250 0.375000 +v 0.250000 -0.062500 0.437500 +v 0.281250 -0.031250 0.375000 +v 0.281250 0.031250 0.375000 v 0.250000 0.062500 0.437500 -v 0.218750 0.125000 0.531250 -v 0.250000 0.062500 0.562500 -v 0.875000 0.062500 0.562500 -v 0.843750 0.125000 0.531250 -v 0.875000 0.062500 0.437500 -v 0.843750 0.125000 0.468750 -v 0.750000 0.062500 0.437500 -v 0.781250 0.125000 0.468750 -v 0.781250 0.125000 0.531250 -v 0.750000 0.062500 0.562500 -v 0.843750 0.187500 0.468750 -v 0.875000 0.000000 0.437500 -v 0.843750 0.187500 0.531250 -v 0.875000 0.000000 0.562500 -v 0.781250 0.187500 0.468750 -v 0.750000 0.000000 0.437500 -v 0.781250 0.187500 0.531250 -v 0.750000 0.000000 0.562500 +v 0.343750 -0.031250 0.312500 +v 0.375000 -0.062500 0.500000 +v 0.343750 0.031250 0.312500 +v 0.375000 0.062500 0.500000 +v 0.281250 -0.031250 0.312500 +v 0.250000 -0.062500 0.500000 +v 0.281250 0.031250 0.312500 +v 0.250000 0.062500 0.500000 vt 0.125000 0.062500 vt 0.093750 0.125000 vt 0.031250 0.125000 @@ -422,15 +422,15 @@ vt 0.000000 0.062500 vt 0.000000 0.000000 vt 0.093750 0.125000 vt 0.031250 0.125000 -vn 0.8944 0.4472 0.0000 -vn 0.0000 0.4472 0.8944 -vn 0.0000 0.0000 1.0000 +vn 0.8944 0.0000 -0.4472 +vn 0.0000 0.8944 -0.4472 +vn 0.0000 1.0000 0.0000 vn 1.0000 0.0000 0.0000 -vn 0.0000 0.0000 -1.0000 -vn -1.0000 0.0000 0.0000 vn 0.0000 -1.0000 0.0000 -vn 0.0000 0.4472 -0.8944 -vn -0.8944 0.4472 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 0.0000 -0.8944 -0.4472 +vn -0.8944 0.0000 -0.4472 usemtl None s off f 51/145/7 52/146/7 50/147/7 49/148/7 @@ -472,55 +472,55 @@ f 94/265/13 90/266/13 92/267/13 96/268/13 f 85/246/14 86/269/14 84/270/14 83/247/14 f 96/271/12 88/272/12 85/273/12 94/274/12 f 88/272/15 87/275/15 86/276/15 85/273/15 -o busbar_isolators.002_busbar_isolators -v 0.562500 0.562500 0.937500 -v 0.531250 0.531250 0.875000 -v 0.562500 0.437500 0.937500 -v 0.531250 0.468750 0.875000 -v 0.437500 0.437500 0.937500 -v 0.468750 0.468750 0.875000 -v 0.468750 0.531250 0.875000 -v 0.437500 0.562500 0.937500 -v 0.531250 0.468750 0.812500 -v 0.562500 0.437500 1.000000 -v 0.531250 0.531250 0.812500 -v 0.562500 0.562500 1.000000 -v 0.468750 0.468750 0.812500 -v 0.437500 0.437500 1.000000 -v 0.468750 0.531250 0.812500 -v 0.437500 0.562500 1.000000 -v 0.125000 0.562500 1.000000 -v 0.156250 0.531250 0.812500 -v 0.125000 0.437500 1.000000 -v 0.156250 0.468750 0.812500 -v 0.250000 0.562500 1.000000 -v 0.218750 0.531250 0.812500 -v 0.250000 0.437500 1.000000 -v 0.218750 0.468750 0.812500 -v 0.125000 0.562500 0.937500 -v 0.156250 0.531250 0.875000 -v 0.156250 0.468750 0.875000 -v 0.125000 0.437500 0.937500 -v 0.218750 0.468750 0.875000 -v 0.250000 0.437500 0.937500 -v 0.218750 0.531250 0.875000 -v 0.250000 0.562500 0.937500 -v 0.875000 0.562500 0.937500 -v 0.843750 0.531250 0.875000 -v 0.875000 0.437500 0.937500 -v 0.843750 0.468750 0.875000 -v 0.750000 0.437500 0.937500 -v 0.781250 0.468750 0.875000 -v 0.781250 0.531250 0.875000 -v 0.750000 0.562500 0.937500 -v 0.843750 0.468750 0.812500 -v 0.875000 0.437500 1.000000 -v 0.843750 0.531250 0.812500 -v 0.875000 0.562500 1.000000 -v 0.781250 0.468750 0.812500 -v 0.750000 0.437500 1.000000 -v 0.781250 0.531250 0.812500 -v 0.750000 0.562500 1.000000 +o busbar_isolators +v 0.062500 -0.437500 0.062500 +v 0.031250 -0.375000 0.031250 +v 0.062500 -0.437500 -0.062500 +v 0.031250 -0.375000 -0.031250 +v -0.062500 -0.437500 -0.062500 +v -0.031250 -0.375000 -0.031250 +v -0.031250 -0.375000 0.031250 +v -0.062500 -0.437500 0.062500 +v 0.031250 -0.312500 -0.031250 +v 0.062500 -0.500000 -0.062500 +v 0.031250 -0.312500 0.031250 +v 0.062500 -0.500000 0.062500 +v -0.031250 -0.312500 -0.031250 +v -0.062500 -0.500000 -0.062500 +v -0.031250 -0.312500 0.031250 +v -0.062500 -0.500000 0.062500 +v -0.375000 -0.500000 0.062500 +v -0.343750 -0.312500 0.031250 +v -0.375000 -0.500000 -0.062500 +v -0.343750 -0.312500 -0.031250 +v -0.250000 -0.500000 0.062500 +v -0.281250 -0.312500 0.031250 +v -0.250000 -0.500000 -0.062500 +v -0.281250 -0.312500 -0.031250 +v -0.375000 -0.437500 0.062500 +v -0.343750 -0.375000 0.031250 +v -0.343750 -0.375000 -0.031250 +v -0.375000 -0.437500 -0.062500 +v -0.281250 -0.375000 -0.031250 +v -0.250000 -0.437500 -0.062500 +v -0.281250 -0.375000 0.031250 +v -0.250000 -0.437500 0.062500 +v 0.375000 -0.437500 0.062500 +v 0.343750 -0.375000 0.031250 +v 0.375000 -0.437500 -0.062500 +v 0.343750 -0.375000 -0.031250 +v 0.250000 -0.437500 -0.062500 +v 0.281250 -0.375000 -0.031250 +v 0.281250 -0.375000 0.031250 +v 0.250000 -0.437500 0.062500 +v 0.343750 -0.312500 -0.031250 +v 0.375000 -0.500000 -0.062500 +v 0.343750 -0.312500 0.031250 +v 0.375000 -0.500000 0.062500 +v 0.281250 -0.312500 -0.031250 +v 0.250000 -0.500000 -0.062500 +v 0.281250 -0.312500 0.031250 +v 0.250000 -0.500000 0.062500 vt 0.125000 0.062500 vt 0.093750 0.125000 vt 0.031250 0.125000 @@ -653,15 +653,15 @@ vt 0.000000 0.062500 vt 0.000000 0.000000 vt 0.093750 0.125000 vt 0.031250 0.125000 -vn 0.8944 0.0000 -0.4472 -vn 0.0000 0.8944 -0.4472 -vn 0.0000 1.0000 0.0000 +vn 0.8944 0.4472 0.0000 +vn 0.0000 0.4472 0.8944 +vn 0.0000 0.0000 1.0000 vn 1.0000 0.0000 0.0000 -vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.0000 -1.0000 vn -1.0000 0.0000 0.0000 -vn 0.0000 0.0000 1.0000 -vn 0.0000 -0.8944 -0.4472 -vn -0.8944 0.0000 -0.4472 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.4472 -0.8944 +vn -0.8944 0.4472 0.0000 usemtl None s off f 99/277/16 100/278/16 98/279/16 97/280/16 diff --git a/src/main/resources/assets/overengineered/models/block/busbar/obj/busbar_edge_outside.obj b/src/main/resources/assets/overengineered/models/block/busbar/obj/busbar_edge_outside.obj index 6ed2247..08dab7b 100644 --- a/src/main/resources/assets/overengineered/models/block/busbar/obj/busbar_edge_outside.obj +++ b/src/main/resources/assets/overengineered/models/block/busbar/obj/busbar_edge_outside.obj @@ -2,54 +2,54 @@ # www.blender.org mtllib busmaterial.mtl o busbar_edge_outside -v 0.437500 0.187500 1.000000 -v 0.437500 0.250000 1.000000 -v 0.125000 0.187500 0.812500 -v 0.437500 0.250000 0.750000 -v 0.562500 0.187500 1.000000 -v 0.562500 0.250000 1.000000 -v 0.562500 0.187500 0.750000 -v 0.250000 0.250000 0.812500 -v 0.562500 0.250000 0.812500 -v 0.437500 0.187500 0.812500 -v 0.562500 0.250000 0.750000 -v 0.250000 0.187500 0.750000 -v 0.250000 0.250000 1.000000 -v 0.437500 0.187500 0.750000 -v 0.250000 0.187500 1.000000 -v 0.437500 0.250000 0.812500 -v 0.125000 0.250000 0.750000 -v 0.125000 0.250000 1.000000 -v 0.562500 0.187500 0.812500 -v 0.125000 0.187500 1.000000 -v 0.250000 0.250000 0.750000 -v 0.125000 0.187500 0.750000 -v 0.125000 0.250000 0.812500 -v 0.250000 0.187500 0.812500 -v 0.250000 0.000000 0.812500 -v 0.125000 0.000000 0.750000 -v 0.250000 0.000000 0.750000 -v 0.750000 0.187500 0.812500 -v 0.875000 0.250000 0.812500 -v 0.875000 0.187500 0.750000 -v 0.875000 0.250000 1.000000 -v 0.875000 0.187500 1.000000 -v 0.750000 0.250000 0.750000 -v 0.750000 0.250000 1.000000 -v 0.750000 0.187500 1.000000 -v 0.875000 0.250000 0.750000 -v 0.750000 0.187500 0.750000 -v 0.750000 0.250000 0.812500 -v 0.875000 0.187500 0.812500 -v 0.750000 0.000000 0.750000 -v 0.437500 0.000000 0.812500 -v 0.437500 0.000000 0.750000 -v 0.562500 0.000000 0.812500 -v 0.562500 0.000000 0.750000 -v 0.125000 0.000000 0.812500 -v 0.750000 0.000000 0.812500 -v 0.875000 0.000000 0.812500 -v 0.875000 0.000000 0.750000 +v -0.062500 -0.312500 0.500000 +v -0.062500 -0.250000 0.500000 +v -0.375000 -0.312500 0.312500 +v -0.062500 -0.250000 0.250000 +v 0.062500 -0.312500 0.500000 +v 0.062500 -0.250000 0.500000 +v 0.062500 -0.312500 0.250000 +v -0.250000 -0.250000 0.312500 +v 0.062500 -0.250000 0.312500 +v -0.062500 -0.312500 0.312500 +v 0.062500 -0.250000 0.250000 +v -0.250000 -0.312500 0.250000 +v -0.250000 -0.250000 0.500000 +v -0.062500 -0.312500 0.250000 +v -0.250000 -0.312500 0.500000 +v -0.062500 -0.250000 0.312500 +v -0.375000 -0.250000 0.250000 +v -0.375000 -0.250000 0.500000 +v 0.062500 -0.312500 0.312500 +v -0.375000 -0.312500 0.500000 +v -0.250000 -0.250000 0.250000 +v -0.375000 -0.312500 0.250000 +v -0.375000 -0.250000 0.312500 +v -0.250000 -0.312500 0.312500 +v -0.250000 -0.500000 0.312500 +v -0.375000 -0.500000 0.250000 +v -0.250000 -0.500000 0.250000 +v 0.250000 -0.312500 0.312500 +v 0.375000 -0.250000 0.312500 +v 0.375000 -0.312500 0.250000 +v 0.375000 -0.250000 0.500000 +v 0.375000 -0.312500 0.500000 +v 0.250000 -0.250000 0.250000 +v 0.250000 -0.250000 0.500000 +v 0.250000 -0.312500 0.500000 +v 0.375000 -0.250000 0.250000 +v 0.250000 -0.312500 0.250000 +v 0.250000 -0.250000 0.312500 +v 0.375000 -0.312500 0.312500 +v 0.250000 -0.500000 0.250000 +v -0.062500 -0.500000 0.312500 +v -0.062500 -0.500000 0.250000 +v 0.062500 -0.500000 0.312500 +v 0.062500 -0.500000 0.250000 +v -0.375000 -0.500000 0.312500 +v 0.250000 -0.500000 0.312500 +v 0.375000 -0.500000 0.312500 +v 0.375000 -0.500000 0.250000 vt 0.187500 0.812500 vt 0.250000 0.812500 vt 0.250000 0.875000 diff --git a/src/main/resources/assets/overengineered/models/block/busbar/obj/busconnector_lv_a.obj b/src/main/resources/assets/overengineered/models/block/busbar/obj/busconnector_lv_a.obj index f83c913..6b83bab 100644 --- a/src/main/resources/assets/overengineered/models/block/busbar/obj/busconnector_lv_a.obj +++ b/src/main/resources/assets/overengineered/models/block/busbar/obj/busconnector_lv_a.obj @@ -2,18 +2,18 @@ # www.blender.org mtllib busmaterial.mtl o busconnector_lv_a -v 0.125000 0.281250 0.562500 -v 0.125000 0.343750 0.562500 -v -0.312500 0.281250 0.562500 -v -0.312500 0.343750 0.562500 -v 0.125000 0.281250 0.437500 -v 0.125000 0.343750 0.437500 -v -0.312500 0.281250 0.437500 -v -0.312500 0.343750 0.437500 -v 0.156250 0.250000 0.562500 -v 0.218750 0.250000 0.562500 -v 0.218750 0.250000 0.437500 -v 0.156250 0.250000 0.437500 +v -0.375000 -0.218750 0.062500 +v -0.375000 -0.156250 0.062500 +v -0.812500 -0.218750 0.062500 +v -0.812500 -0.156250 0.062500 +v -0.375000 -0.218750 -0.062500 +v -0.375000 -0.156250 -0.062500 +v -0.812500 -0.218750 -0.062500 +v -0.812500 -0.156250 -0.062500 +v -0.343750 -0.250000 0.062500 +v -0.281250 -0.250000 0.062500 +v -0.281250 -0.250000 -0.062500 +v -0.343750 -0.250000 -0.062500 vt 1.000000 0.875000 vt 1.000000 0.812500 vt 1.000000 0.812500 @@ -42,7 +42,7 @@ vt 0.062500 0.875000 vt 0.062500 1.000000 vt 0.000000 1.000000 vt 0.000000 0.875000 -vn -0.0000 0.0000 1.0000 +vn 0.0000 0.0000 1.0000 vn 0.0000 -1.0000 0.0000 vn 0.0000 0.0000 -1.0000 vn 0.0000 1.0000 0.0000 diff --git a/src/main/resources/assets/overengineered/models/block/busbar/obj/busconnector_lv_b.obj b/src/main/resources/assets/overengineered/models/block/busbar/obj/busconnector_lv_b.obj index 00165d7..a0ad929 100644 --- a/src/main/resources/assets/overengineered/models/block/busbar/obj/busconnector_lv_b.obj +++ b/src/main/resources/assets/overengineered/models/block/busbar/obj/busconnector_lv_b.obj @@ -2,18 +2,18 @@ # www.blender.org mtllib busmaterial.mtl o busconnector_lv_b -v 0.437500 0.281250 0.562500 -v 0.437500 0.343750 0.562500 -v -0.312500 0.281250 0.562500 -v -0.312500 0.343750 0.562500 -v 0.437500 0.281250 0.437500 -v 0.437500 0.343750 0.437500 -v -0.312500 0.281250 0.437500 -v -0.312500 0.343750 0.437500 -v 0.468750 0.250000 0.562500 -v 0.531250 0.250000 0.562500 -v 0.531250 0.250000 0.437500 -v 0.468750 0.250000 0.437500 +v -0.062500 -0.218750 0.062500 +v -0.062500 -0.156250 0.062500 +v -0.812500 -0.218750 0.062500 +v -0.812500 -0.156250 0.062500 +v -0.062500 -0.218750 -0.062500 +v -0.062500 -0.156250 -0.062500 +v -0.812500 -0.218750 -0.062500 +v -0.812500 -0.156250 -0.062500 +v -0.031250 -0.250000 0.062500 +v 0.031250 -0.250000 0.062500 +v 0.031250 -0.250000 -0.062500 +v -0.031250 -0.250000 -0.062500 vt 1.000000 0.875000 vt 1.000000 0.812500 vt 1.000000 0.812500 @@ -42,7 +42,7 @@ vt 0.062500 0.875000 vt 0.062500 1.000000 vt 0.000000 1.000000 vt 0.000000 0.875000 -vn -0.0000 0.0000 1.0000 +vn 0.0000 0.0000 1.0000 vn 0.0000 -1.0000 0.0000 vn 0.0000 0.0000 -1.0000 vn 0.0000 1.0000 0.0000 diff --git a/src/main/resources/assets/overengineered/models/block/busbar/obj/busconnector_lv_c.obj b/src/main/resources/assets/overengineered/models/block/busbar/obj/busconnector_lv_c.obj index 87d52dc..6677374 100644 --- a/src/main/resources/assets/overengineered/models/block/busbar/obj/busconnector_lv_c.obj +++ b/src/main/resources/assets/overengineered/models/block/busbar/obj/busconnector_lv_c.obj @@ -2,22 +2,22 @@ # www.blender.org mtllib busmaterial.mtl o busconnector_lv_c -v 0.750000 0.281250 0.562500 -v 0.750000 0.343750 0.562500 -v -0.312500 0.281250 0.562500 -v -0.312500 0.343750 0.562500 -v 0.750000 0.281250 0.437500 -v 0.750000 0.343750 0.437500 -v -0.312500 0.281250 0.437500 -v -0.312500 0.343750 0.437500 -v 0.781250 0.250000 0.562500 -v 0.843750 0.250000 0.562500 -v 0.843750 0.250000 0.437500 -v 0.781250 0.250000 0.437500 -v 0.187500 0.281250 0.562500 -v 0.187500 0.343750 0.562500 -v 0.187500 0.281250 0.437500 -v 0.187500 0.343750 0.437500 +v 0.250000 -0.218750 0.062500 +v 0.250000 -0.156250 0.062500 +v -0.812500 -0.218750 0.062500 +v -0.812500 -0.156250 0.062500 +v 0.250000 -0.218750 -0.062500 +v 0.250000 -0.156250 -0.062500 +v -0.812500 -0.218750 -0.062500 +v -0.812500 -0.156250 -0.062500 +v 0.281250 -0.250000 0.062500 +v 0.343750 -0.250000 0.062500 +v 0.343750 -0.250000 -0.062500 +v 0.281250 -0.250000 -0.062500 +v -0.312500 -0.218750 0.062500 +v -0.312500 -0.156250 0.062500 +v -0.312500 -0.218750 -0.062500 +v -0.312500 -0.156250 -0.062500 vt 1.000000 0.875000 vt 1.000000 0.812500 vt 1.000000 0.812500 @@ -60,7 +60,7 @@ vt 0.000000 1.000000 vt 0.000000 0.875000 vt 0.000000 1.000000 vt 0.562500 1.000000 -vn -0.0000 0.0000 1.0000 +vn 0.0000 0.0000 1.0000 vn 0.0000 1.0000 0.0000 vn 0.7071 0.7071 0.0000 vn 0.0000 0.0000 -1.0000 diff --git a/src/main/resources/assets/overengineered/models/block/busbar/obj/busconnector_mv_a.obj b/src/main/resources/assets/overengineered/models/block/busbar/obj/busconnector_mv_a.obj index 606e94b..6fdd710 100644 --- a/src/main/resources/assets/overengineered/models/block/busbar/obj/busconnector_mv_a.obj +++ b/src/main/resources/assets/overengineered/models/block/busbar/obj/busconnector_mv_a.obj @@ -2,22 +2,22 @@ # www.blender.org mtllib busmaterial.mtl o busconnector_mv_a -v 0.125000 0.343750 0.562500 -v 0.125000 0.406250 0.562500 -v -0.312500 0.343750 0.562500 -v -0.312500 0.406250 0.562500 -v 0.125000 0.343750 0.437500 -v 0.125000 0.406250 0.437500 -v -0.312500 0.343750 0.437500 -v -0.312500 0.406250 0.437500 -v 0.156250 0.312500 0.562500 -v 0.218750 0.312500 0.562500 -v 0.218750 0.312500 0.437500 -v 0.156250 0.312500 0.437500 -v 0.156250 0.250000 0.562500 -v 0.218750 0.250000 0.562500 -v 0.218750 0.250000 0.437500 -v 0.156250 0.250000 0.437500 +v -0.375000 -0.156250 0.062500 +v -0.375000 -0.093750 0.062500 +v -0.812500 -0.156250 0.062500 +v -0.812500 -0.093750 0.062500 +v -0.375000 -0.156250 -0.062500 +v -0.375000 -0.093750 -0.062500 +v -0.812500 -0.156250 -0.062500 +v -0.812500 -0.093750 -0.062500 +v -0.343750 -0.187500 0.062500 +v -0.281250 -0.187500 0.062500 +v -0.281250 -0.187500 -0.062500 +v -0.343750 -0.187500 -0.062500 +v -0.343750 -0.250000 0.062500 +v -0.281250 -0.250000 0.062500 +v -0.281250 -0.250000 -0.062500 +v -0.343750 -0.250000 -0.062500 vt 1.000000 0.875000 vt 1.000000 0.812500 vt 1.000000 0.812500 @@ -60,7 +60,7 @@ vt 0.187500 0.875000 vt 0.187500 1.000000 vt 0.125000 1.000000 vt 0.125000 0.875000 -vn -0.0000 0.0000 1.0000 +vn 0.0000 0.0000 1.0000 vn 0.0000 -1.0000 0.0000 vn 0.0000 0.0000 -1.0000 vn 0.0000 1.0000 0.0000 diff --git a/src/main/resources/assets/overengineered/models/block/busbar/obj/busconnector_mv_b.obj b/src/main/resources/assets/overengineered/models/block/busbar/obj/busconnector_mv_b.obj index fd7a08d..d01b574 100644 --- a/src/main/resources/assets/overengineered/models/block/busbar/obj/busconnector_mv_b.obj +++ b/src/main/resources/assets/overengineered/models/block/busbar/obj/busconnector_mv_b.obj @@ -2,22 +2,22 @@ # www.blender.org mtllib busmaterial.mtl o busconnector_mv_b -v 0.437500 0.343750 0.562500 -v 0.437500 0.406250 0.562500 -v -0.312500 0.343750 0.562500 -v -0.312500 0.406250 0.562500 -v 0.437500 0.343750 0.437500 -v 0.437500 0.406250 0.437500 -v -0.312500 0.343750 0.437500 -v -0.312500 0.406250 0.437500 -v 0.468750 0.312500 0.562500 -v 0.531250 0.312500 0.562500 -v 0.531250 0.312500 0.437500 -v 0.468750 0.312500 0.437500 -v 0.468750 0.250000 0.562500 -v 0.531250 0.250000 0.562500 -v 0.531250 0.250000 0.437500 -v 0.468750 0.250000 0.437500 +v -0.062500 -0.156250 0.062500 +v -0.062500 -0.093750 0.062500 +v -0.812500 -0.156250 0.062500 +v -0.812500 -0.093750 0.062500 +v -0.062500 -0.156250 -0.062500 +v -0.062500 -0.093750 -0.062500 +v -0.812500 -0.156250 -0.062500 +v -0.812500 -0.093750 -0.062500 +v -0.031250 -0.187500 0.062500 +v 0.031250 -0.187500 0.062500 +v 0.031250 -0.187500 -0.062500 +v -0.031250 -0.187500 -0.062500 +v -0.031250 -0.250000 0.062500 +v 0.031250 -0.250000 0.062500 +v 0.031250 -0.250000 -0.062500 +v -0.031250 -0.250000 -0.062500 vt 1.000000 0.875000 vt 1.000000 0.812500 vt 1.000000 0.812500 @@ -60,7 +60,7 @@ vt 0.187500 0.875000 vt 0.187500 1.000000 vt 0.125000 1.000000 vt 0.125000 0.875000 -vn -0.0000 0.0000 1.0000 +vn 0.0000 0.0000 1.0000 vn 0.0000 -1.0000 0.0000 vn 0.0000 0.0000 -1.0000 vn 0.0000 1.0000 0.0000 diff --git a/src/main/resources/assets/overengineered/models/block/busbar/obj/busconnector_mv_c.obj b/src/main/resources/assets/overengineered/models/block/busbar/obj/busconnector_mv_c.obj index 51e90b1..b3714af 100644 --- a/src/main/resources/assets/overengineered/models/block/busbar/obj/busconnector_mv_c.obj +++ b/src/main/resources/assets/overengineered/models/block/busbar/obj/busconnector_mv_c.obj @@ -2,26 +2,26 @@ # www.blender.org mtllib busmaterial.mtl o busconnector_mv_c -v 0.750000 0.343750 0.562500 -v 0.750000 0.406250 0.562500 -v -0.312500 0.343750 0.562500 -v -0.312500 0.406250 0.562500 -v 0.750000 0.343750 0.437500 -v 0.750000 0.406250 0.437500 -v -0.312500 0.343750 0.437500 -v -0.312500 0.406250 0.437500 -v 0.781250 0.312500 0.562500 -v 0.843750 0.312500 0.562500 -v 0.843750 0.312500 0.437500 -v 0.781250 0.312500 0.437500 -v 0.781250 0.250000 0.562500 -v 0.843750 0.250000 0.562500 -v 0.843750 0.250000 0.437500 -v 0.781250 0.250000 0.437500 -v 0.187500 0.343750 0.562500 -v 0.187500 0.406250 0.562500 -v 0.187500 0.343750 0.437500 -v 0.187500 0.406250 0.437500 +v 0.250000 -0.156250 0.062500 +v 0.250000 -0.093750 0.062500 +v -0.812500 -0.156250 0.062500 +v -0.812500 -0.093750 0.062500 +v 0.250000 -0.156250 -0.062500 +v 0.250000 -0.093750 -0.062500 +v -0.812500 -0.156250 -0.062500 +v -0.812500 -0.093750 -0.062500 +v 0.281250 -0.187500 0.062500 +v 0.343750 -0.187500 0.062500 +v 0.343750 -0.187500 -0.062500 +v 0.281250 -0.187500 -0.062500 +v 0.281250 -0.250000 0.062500 +v 0.343750 -0.250000 0.062500 +v 0.343750 -0.250000 -0.062500 +v 0.281250 -0.250000 -0.062500 +v -0.312500 -0.156250 0.062500 +v -0.312500 -0.093750 0.062500 +v -0.312500 -0.156250 -0.062500 +v -0.312500 -0.093750 -0.062500 vt 1.000000 0.875000 vt 1.000000 0.812500 vt 1.000000 0.812500 @@ -78,7 +78,7 @@ vt 0.000000 1.000000 vt 0.000000 0.875000 vt 0.000000 1.000000 vt 0.562500 1.000000 -vn -0.0000 0.0000 1.0000 +vn 0.0000 0.0000 1.0000 vn 0.0000 1.0000 0.0000 vn 0.0000 0.0000 -1.0000 vn 0.7071 0.7071 0.0000 From ea7e37f40fdb228cb24f9539ae1f60c328b92158 Mon Sep 17 00:00:00 2001 From: TwistedGate <31029668+TwistedGate@users.noreply.github.com> Date: Tue, 26 Dec 2023 19:43:10 +0100 Subject: [PATCH 25/26] Models are now correctly rotated --- .../client/render/BusbarRenderer.java | 22 ++- .../utils/enums/EnumBusbarShape.java | 177 ++++++++++++------ 2 files changed, 129 insertions(+), 70 deletions(-) diff --git a/src/main/java/twistedgate/overengineered/client/render/BusbarRenderer.java b/src/main/java/twistedgate/overengineered/client/render/BusbarRenderer.java index 74c6571..a684afc 100644 --- a/src/main/java/twistedgate/overengineered/client/render/BusbarRenderer.java +++ b/src/main/java/twistedgate/overengineered/client/render/BusbarRenderer.java @@ -13,8 +13,6 @@ import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack.Pose; import com.mojang.blaze3d.vertex.VertexConsumer; -import com.mojang.math.Quaternion; -import com.mojang.math.Vector3f; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.MultiBufferSource; @@ -28,8 +26,10 @@ import net.minecraftforge.client.model.ForgeModelBakery; import net.minecraftforge.client.model.data.EmptyModelData; import net.minecraftforge.client.model.data.IModelData; +import twistedgate.overengineered.common.blocks.busbar.BusbarBlock; import twistedgate.overengineered.common.blocks.tileentity.BusbarTileEntity; import twistedgate.overengineered.utils.ResourceUtils; +import twistedgate.overengineered.utils.enums.EnumBusbarShape; public class BusbarRenderer implements BlockEntityRenderer{ static final ResourceLocation MODEL_BUSBAR_STRAIGHT = ResourceUtils.oe("block/busbar/json/busbar_straight"); @@ -64,15 +64,21 @@ public static void init(){ @Override public void render(BusbarTileEntity blockEntity, float partialTick, PoseStack matrix, MultiBufferSource buffer, int light, int overlay){ + final BlockState state = blockEntity.getBlockState(); + final EnumBusbarShape shape = state.getValue(BusbarBlock.SHAPE); + + // TODO Relay connections + matrix.pushPose(); { matrix.translate(0.5, 0.5, 0.5); - // TODO EnumBusbarShape dependant Rotation - - matrix.mulPose(new Quaternion(Vector3f.YP, 0.0F, true)); + shape.applyModelRotation(matrix); - renderModel(MODEL_BUSBAR_STRAIGHT, matrix, buffer, light, overlay); + if(EnumBusbarShape.Type.SEGMENTS_STRAIGHT.contains(shape)) renderModel(MODEL_BUSBAR_STRAIGHT, matrix, buffer, light, overlay); + if(EnumBusbarShape.Type.SEGMENTS_BEND.contains(shape)) renderModel(MODEL_BUSBAR_BEND, matrix, buffer, light, overlay); + if(EnumBusbarShape.Type.SEGMENTS_EDGE_IN.contains(shape)) renderModel(MODEL_BUSBAR_EDGE_IN, matrix, buffer, light, overlay); + if(EnumBusbarShape.Type.SEGMENTS_EDGE_OUT.contains(shape)) renderModel(MODEL_BUSBAR_EDGE_OUT, matrix, buffer, light, overlay); } matrix.popPose(); } @@ -119,10 +125,10 @@ private static List getCachedQuads(ResourceLocation modelRL){ private static List get(ResourceLocation modelRL){ rand.setSeed(42L); - ArrayList quads = new ArrayList<>(get(MODEL_BUSBAR_STRAIGHT, null, null, rand, EmptyModelData.INSTANCE)); + ArrayList quads = new ArrayList<>(get(modelRL, null, null, rand, EmptyModelData.INSTANCE)); for(Direction side:Direction.values()){ // For some reason not all faces are returned, this gets the rest of them - quads.addAll(get(MODEL_BUSBAR_STRAIGHT, null, side, rand, EmptyModelData.INSTANCE)); + quads.addAll(get(modelRL, null, side, rand, EmptyModelData.INSTANCE)); } quads.trimToSize(); return quads; diff --git a/src/main/java/twistedgate/overengineered/utils/enums/EnumBusbarShape.java b/src/main/java/twistedgate/overengineered/utils/enums/EnumBusbarShape.java index adfc97e..de4d297 100644 --- a/src/main/java/twistedgate/overengineered/utils/enums/EnumBusbarShape.java +++ b/src/main/java/twistedgate/overengineered/utils/enums/EnumBusbarShape.java @@ -15,17 +15,24 @@ import java.util.Objects; import java.util.Set; import java.util.function.BiConsumer; +import java.util.function.Consumer; import java.util.stream.Stream; import javax.annotation.Nullable; import com.google.common.collect.Iterators; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.math.Quaternion; +import com.mojang.math.Vector3f; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.core.Vec3i; import net.minecraft.util.StringRepresentable; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; import twistedgate.overengineered.common.blocks.busbar.BusbarBlock; /** @@ -34,86 +41,125 @@ public enum EnumBusbarShape implements StringRepresentable{ // @formatter:off // Straights with Insulators (FACING_FROM_TO) - INSULATORS_DOWN_NORTH_SOUTH(DOWN, Connections.NORTH_SOUTH), - INSULATORS_DOWN_EAST_WEST(DOWN, Connections.EAST_WEST), - INSULATORS_UP_NORTH_SOUTH(UP, Connections.NORTH_SOUTH), - INSULATORS_UP_EAST_WEST(UP, Connections.EAST_WEST), + INSULATORS_DOWN_NORTH_SOUTH(DOWN, Connections.NORTH_SOUTH, new Vec3i(0, 0, 0)), + INSULATORS_DOWN_EAST_WEST(DOWN, Connections.EAST_WEST, new Vec3i(0, 90, 0)), + INSULATORS_UP_NORTH_SOUTH(UP, Connections.NORTH_SOUTH, new Vec3i(180, 0, 0)), + INSULATORS_UP_EAST_WEST(UP, Connections.EAST_WEST, new Vec3i(180, 90, 0)), - INSULATORS_NORTH_UP_DOWN(NORTH, Connections.UP_DOWN), - INSULATORS_EAST_UP_DOWN(EAST, Connections.UP_DOWN), - INSULATORS_SOUTH_UP_DOWN(SOUTH, Connections.UP_DOWN), - INSULATORS_WEST_UP_DOWN(WEST, Connections.UP_DOWN), - INSULATORS_NORTH_EAST_WEST(NORTH, Connections.EAST_WEST), - INSULATORS_EAST_NORTH_SOUTH(EAST, Connections.NORTH_SOUTH), - INSULATORS_SOUTH_EAST_WEST(SOUTH, Connections.EAST_WEST), - INSULATORS_WEST_NORTH_SOUTH(WEST, Connections.NORTH_SOUTH), + INSULATORS_NORTH_UP_DOWN(NORTH, Connections.UP_DOWN, new Vec3i(90, 0, 0)), + INSULATORS_EAST_UP_DOWN(EAST, Connections.UP_DOWN, new Vec3i(90, 270, 0)), + INSULATORS_SOUTH_UP_DOWN(SOUTH, Connections.UP_DOWN, new Vec3i(90, 180, 0)), + INSULATORS_WEST_UP_DOWN(WEST, Connections.UP_DOWN, new Vec3i(90, 90, 0)), + INSULATORS_NORTH_EAST_WEST(NORTH, Connections.EAST_WEST, new Vec3i(90, 0, 90)), + INSULATORS_EAST_NORTH_SOUTH(EAST, Connections.NORTH_SOUTH, new Vec3i(90, 270, 90)), + INSULATORS_SOUTH_EAST_WEST(SOUTH, Connections.EAST_WEST, new Vec3i(90, 180, 90)), + INSULATORS_WEST_NORTH_SOUTH(WEST, Connections.NORTH_SOUTH, new Vec3i(90, 90, 90)), // 90° Bends (FACING_FROM_TO) - BEND_DOWN_NORTH_EAST(DOWN, Connections.NORTH_EAST), - BEND_DOWN_EAST_SOUTH(DOWN, Connections.EAST_SOUTH), - BEND_DOWN_SOUTH_WEST(DOWN, Connections.SOUTH_WEST), - BEND_DOWN_WEST_NORTH(DOWN, Connections.WEST_NORTH), + BEND_DOWN_NORTH_EAST(DOWN, Connections.NORTH_EAST, new Vec3i(0, 270, 0)), + BEND_DOWN_EAST_SOUTH(DOWN, Connections.EAST_SOUTH, new Vec3i(0, 180, 0)), + BEND_DOWN_SOUTH_WEST(DOWN, Connections.SOUTH_WEST, new Vec3i(0, 90, 0)), + BEND_DOWN_WEST_NORTH(DOWN, Connections.WEST_NORTH, new Vec3i(0, 0, 0)), - BEND_UP_NORTH_EAST(UP, Connections.NORTH_EAST), - BEND_UP_EAST_SOUTH(UP, Connections.EAST_SOUTH), - BEND_UP_SOUTH_WEST(UP, Connections.SOUTH_WEST), - BEND_UP_WEST_NORTH(UP, Connections.WEST_NORTH), + BEND_UP_NORTH_EAST(UP, Connections.NORTH_EAST, new Vec3i(180, 180, 0)), + BEND_UP_EAST_SOUTH(UP, Connections.EAST_SOUTH, new Vec3i(180, 90, 0)), + BEND_UP_SOUTH_WEST(UP, Connections.SOUTH_WEST, new Vec3i(180, 0, 0)), + BEND_UP_WEST_NORTH(UP, Connections.WEST_NORTH, new Vec3i(180, 270, 0)), - BEND_NORTH_DOWN_EAST(NORTH, Connections.DOWN_EAST), - BEND_NORTH_EAST_UP(NORTH, Connections.UP_EAST), - BEND_NORTH_UP_WEST(NORTH, Connections.UP_WEST), - BEND_NORTH_WEST_DOWN(NORTH, Connections.DOWN_WEST), + BEND_NORTH_DOWN_EAST(NORTH, Connections.DOWN_EAST, new Vec3i(90, 0, 180)), + BEND_NORTH_EAST_UP(NORTH, Connections.UP_EAST, new Vec3i(90, 0, 270)), + BEND_NORTH_UP_WEST(NORTH, Connections.UP_WEST, new Vec3i(90, 0, 0)), + BEND_NORTH_WEST_DOWN(NORTH, Connections.DOWN_WEST, new Vec3i(90, 0, 90)), - BEND_EAST_DOWN_SOUTH(EAST, Connections.DOWN_SOUTH), - BEND_EAST_SOUTH_UP(EAST, Connections.UP_SOUTH), - BEND_EAST_UP_NORTH(EAST, Connections.UP_NORTH), - BEND_EAST_NORTH_DOWN(EAST, Connections.DOWN_NORTH), + BEND_EAST_DOWN_SOUTH(EAST, Connections.DOWN_SOUTH, new Vec3i(270, 90, 0)), + BEND_EAST_SOUTH_UP(EAST, Connections.UP_SOUTH, new Vec3i(270, 90, 270)), + BEND_EAST_UP_NORTH(EAST, Connections.UP_NORTH, new Vec3i(270, 90, 180)), + BEND_EAST_NORTH_DOWN(EAST, Connections.DOWN_NORTH, new Vec3i(270, 90, 90)), - BEND_SOUTH_DOWN_WEST(SOUTH, Connections.DOWN_WEST), - BEND_SOUTH_WEST_UP(SOUTH, Connections.UP_WEST), - BEND_SOUTH_UP_EAST(SOUTH, Connections.UP_EAST), - BEND_SOUTH_EAST_DOWN(SOUTH, Connections.DOWN_EAST), + BEND_SOUTH_DOWN_WEST(SOUTH, Connections.DOWN_WEST, new Vec3i(270, 0, 0)), + BEND_SOUTH_WEST_UP(SOUTH, Connections.UP_WEST, new Vec3i(270, 0, 270)), + BEND_SOUTH_UP_EAST(SOUTH, Connections.UP_EAST, new Vec3i(270, 0, 180)), + BEND_SOUTH_EAST_DOWN(SOUTH, Connections.DOWN_EAST, new Vec3i(270, 0, 90)), - BEND_WEST_DOWN_NORTH(WEST, Connections.DOWN_NORTH), - BEND_WEST_NORTH_UP(WEST, Connections.UP_NORTH), - BEND_WEST_UP_SOUTH(WEST, Connections.UP_SOUTH), - BEND_WEST_SOUTH_DOWN(WEST, Connections.DOWN_SOUTH), + BEND_WEST_DOWN_NORTH(WEST, Connections.DOWN_NORTH, new Vec3i(270, 270, 0)), + BEND_WEST_NORTH_UP(WEST, Connections.UP_NORTH, new Vec3i(270, 270, 270)), + BEND_WEST_UP_SOUTH(WEST, Connections.UP_SOUTH, new Vec3i(270, 270, 180)), + BEND_WEST_SOUTH_DOWN(WEST, Connections.DOWN_SOUTH, new Vec3i(270, 270, 90)), // Inside Edges (FACING_SIDE_FROM_TO) - EDGE_INSIDE_DOWN_NORTH_UP_SOUTH (DOWN, Connections.UP_SOUTH), - EDGE_INSIDE_DOWN_EAST_UP_WEST (DOWN, Connections.UP_WEST), - EDGE_INSIDE_DOWN_SOUTH_UP_NORTH (DOWN, Connections.UP_NORTH), - EDGE_INSIDE_DOWN_WEST_UP_EAST (DOWN, Connections.UP_EAST), - EDGE_INSIDE_UP_NORTH_DOWN_SOUTH (UP, Connections.DOWN_SOUTH), - EDGE_INSIDE_UP_EAST_DOWN_WEST (UP, Connections.DOWN_WEST), - EDGE_INSIDE_UP_SOUTH_DOWN_NORTH (UP, Connections.DOWN_NORTH), - EDGE_INSIDE_UP_WEST_DOWN_EAST (UP, Connections.DOWN_EAST), + EDGE_INSIDE_DOWN_NORTH_UP_SOUTH (DOWN, Connections.UP_SOUTH,new Vec3i(0, 180, 0)), + EDGE_INSIDE_DOWN_EAST_UP_WEST (DOWN, Connections.UP_WEST, new Vec3i(0, 90, 0)), + EDGE_INSIDE_DOWN_SOUTH_UP_NORTH (DOWN, Connections.UP_NORTH,new Vec3i(0, 0, 0)), + EDGE_INSIDE_DOWN_WEST_UP_EAST (DOWN, Connections.UP_EAST, new Vec3i(0, 270, 0)), + EDGE_INSIDE_UP_NORTH_DOWN_SOUTH (UP, Connections.DOWN_SOUTH,new Vec3i(180, 0, 0)), + EDGE_INSIDE_UP_EAST_DOWN_WEST (UP, Connections.DOWN_WEST, new Vec3i(180, 270, 0)), + EDGE_INSIDE_UP_SOUTH_DOWN_NORTH (UP, Connections.DOWN_NORTH,new Vec3i(180, 180, 0)), + EDGE_INSIDE_UP_WEST_DOWN_EAST (UP, Connections.DOWN_EAST, new Vec3i(180, 90, 0)), // Outside Edges (FACING_SIDE_FROM_TO) - EDGE_OUTSIDE_DOWN_NORTH_UP_SOUTH(DOWN, Connections.UP_SOUTH), - EDGE_OUTSIDE_DOWN_EAST_UP_WEST (DOWN, Connections.UP_WEST), - EDGE_OUTSIDE_DOWN_SOUTH_UP_NORTH(DOWN, Connections.UP_NORTH), - EDGE_OUTSIDE_DOWN_WEST_UP_EAST (DOWN, Connections.UP_EAST), - EDGE_OUTSIDE_UP_NORTH_DOWN_SOUTH(UP, Connections.DOWN_SOUTH), - EDGE_OUTSIDE_UP_EAST_DOWN_WEST (UP, Connections.DOWN_WEST), - EDGE_OUTSIDE_UP_SOUTH_DOWN_NORTH(UP, Connections.DOWN_NORTH), - EDGE_OUTSIDE_UP_WEST_DOWN_EAST (UP, Connections.DOWN_EAST), + EDGE_OUTSIDE_DOWN_NORTH_UP_SOUTH(DOWN, Connections.UP_SOUTH,new Vec3i(0, 0, 0)), + EDGE_OUTSIDE_DOWN_EAST_UP_WEST (DOWN, Connections.UP_WEST, new Vec3i(0, 270, 0)), + EDGE_OUTSIDE_DOWN_SOUTH_UP_NORTH(DOWN, Connections.UP_NORTH,new Vec3i(0, 180, 0)), + EDGE_OUTSIDE_DOWN_WEST_UP_EAST (DOWN, Connections.UP_EAST, new Vec3i(0, 90, 0)), + EDGE_OUTSIDE_UP_NORTH_DOWN_SOUTH(UP, Connections.DOWN_SOUTH,new Vec3i(270, 180, 0)), + EDGE_OUTSIDE_UP_EAST_DOWN_WEST (UP, Connections.DOWN_WEST, new Vec3i(270, 90, 0)), + EDGE_OUTSIDE_UP_SOUTH_DOWN_NORTH(UP, Connections.DOWN_NORTH,new Vec3i(270, 0, 0)), + EDGE_OUTSIDE_UP_WEST_DOWN_EAST (UP, Connections.DOWN_EAST, new Vec3i(270, 270, 0)), ; // @formatter:on private final String serialname; public final Direction facing; public final Connections connections; + private final Consumer rotations; private EnumBusbarShape(Direction facing, Connections cons){ this.serialname = name().toLowerCase(); this.facing = facing; this.connections = cons; + this.rotations = prepareRotations(null); } - - private EnumBusbarShape(String name, Direction facing, Connections cons){ - this.serialname = name; + /** + * @param facing - Effectively which side of the Block it attaches to.
+ * (North meaning it attaches to the South-Face) + * @param cons - Possible connection-sides + * @param modelRotation - How much to rotate by each axis. (Rotation order: YZX) + */ + private EnumBusbarShape(Direction facing, Connections cons, Vec3i modelRotation){ + this.serialname = name().toLowerCase(); this.facing = facing; this.connections = cons; + this.rotations = prepareRotations(modelRotation); + } + + private static final BiConsumer mulPose = (p, q) -> p.mulPose(q); + private Consumer prepareRotations(Vec3i modelRotation){ + final Consumer doNothing = p -> {}; + + if(modelRotation == null || (modelRotation != null && modelRotation.equals(Vec3i.ZERO))) + return doNothing; + + final Quaternion qX = new Quaternion(Vector3f.XP, modelRotation.getX(), true); + final Quaternion qY = new Quaternion(Vector3f.YP, modelRotation.getY(), true); + final Quaternion qZ = new Quaternion(Vector3f.ZP, modelRotation.getZ(), true); + + final Consumer x = modelRotation.getX() != 0 ? p -> mulPose.accept(p, qX) : doNothing; + final Consumer y = modelRotation.getY() != 0 ? p -> mulPose.accept(p, qY) : doNothing; + final Consumer z = modelRotation.getZ() != 0 ? p -> mulPose.accept(p, qZ) : doNothing; + + Objects.requireNonNull(x, String.format("Consumer for X is Null! (%s)", this)); + Objects.requireNonNull(y, String.format("Consumer for Y is Null! (%s)", this)); + Objects.requireNonNull(z, String.format("Consumer for Z is Null! (%s)", this)); + + return(matrix -> { + y.accept(matrix); + z.accept(matrix); + x.accept(matrix); + }); + } + + @OnlyIn(Dist.CLIENT) + public void applyModelRotation(PoseStack matrix){ + this.rotations.accept(matrix); } public boolean hasFreeConnectionPoint(Level level, BlockPos pos){ @@ -382,9 +428,10 @@ public static enum Type implements Iterable{ ) ; // @formatter:on - public static final Set STRAIGHT_SEGMENTS; - public static final Set BEND_SEGMENTS; - public static final Set EDGE_SEGMENTS; + public static final Set SEGMENTS_STRAIGHT; + public static final Set SEGMENTS_BEND; + public static final Set SEGMENTS_EDGE_IN; + public static final Set SEGMENTS_EDGE_OUT; static{ { HashSet list = new HashSet<>(); @@ -394,7 +441,7 @@ public static enum Type implements Iterable{ list.addAll(Arrays.asList(STRAIGHT_INSULATORS_WALL_NORMAL.shapes)); list.addAll(Arrays.asList(STRAIGHT_INSULATORS_WALL_ROTATED.shapes)); - STRAIGHT_SEGMENTS = Collections.unmodifiableSet(list); + SEGMENTS_STRAIGHT = Collections.unmodifiableSet(list); } { HashSet list = new HashSet<>(); @@ -403,17 +450,23 @@ public static enum Type implements Iterable{ list.addAll(Arrays.asList(BENDS_CEILING.shapes)); list.addAll(Arrays.asList(BENDS_WALLS.shapes)); - BEND_SEGMENTS = Collections.unmodifiableSet(list); + SEGMENTS_BEND = Collections.unmodifiableSet(list); } { HashSet list = new HashSet<>(); - + list.addAll(Arrays.asList(EDGE_INSIDE_FLOOR.shapes)); list.addAll(Arrays.asList(EDGE_INSIDE_CEILING.shapes)); + + SEGMENTS_EDGE_IN = Collections.unmodifiableSet(list); + } + { + HashSet list = new HashSet<>(); + list.addAll(Arrays.asList(EDGE_OUTSIDE_FLOOR.shapes)); list.addAll(Arrays.asList(EDGE_OUTSIDE_CEILING.shapes)); - EDGE_SEGMENTS = Collections.unmodifiableSet(list); + SEGMENTS_EDGE_OUT = Collections.unmodifiableSet(list); } } From cef9facadf9cdeb1dbdc8899530ff4d444f51109 Mon Sep 17 00:00:00 2001 From: TwistedGate <31029668+TwistedGate@users.noreply.github.com> Date: Tue, 26 Dec 2023 19:43:23 +0100 Subject: [PATCH 26/26] Fixing broken bounding-boxes --- .../common/blocks/busbar/BusbarBlock.java | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java b/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java index f22282a..075e5ec 100644 --- a/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java +++ b/src/main/java/twistedgate/overengineered/common/blocks/busbar/BusbarBlock.java @@ -316,25 +316,25 @@ private static Map makeShapeCache(){ case BEND_UP_SOUTH_WEST -> Shapes.create(0.0, 0.75, 0.125, 0.875, 1.0, 1.0); case BEND_UP_WEST_NORTH -> Shapes.create(0.0, 0.75, 0.0, 0.875, 1.0, 0.875); - case BEND_NORTH_DOWN_EAST -> Shapes.create(0.125, 0.125, 0.0, 1.0, 1.0, 0.25); - case BEND_NORTH_EAST_UP -> Shapes.create(0.125, 0.0, 0.0, 1.0, 0.875, 0.25); + case BEND_NORTH_DOWN_EAST -> Shapes.create(0.125, 0.0, 0.0, 1.0, 0.875, 0.25); + case BEND_NORTH_EAST_UP -> Shapes.create(0.125, 0.125, 0.0, 1.0, 1.0, 0.25); case BEND_NORTH_UP_WEST -> Shapes.create(0.0, 0.125, 0.0, 0.875, 1.0, 0.25); - case BEND_NORTH_WEST_DOWN -> Shapes.create(0.0, 0.125, 0.0, 0.875, 1.0, 0.25); + case BEND_NORTH_WEST_DOWN -> Shapes.create(0.0, 0.0, 0.0, 0.875, 0.875, 0.25); - case BEND_EAST_DOWN_SOUTH -> Shapes.create(0.75, 0.125, 0.0, 1.0, 1.0, 0.875); - case BEND_EAST_SOUTH_UP -> Shapes.create(0.75, 0.125, 0.0, 1.0, 1.0, 0.875); + case BEND_EAST_DOWN_SOUTH -> Shapes.create(0.75, 0.0, 0.125, 1.0, 0.875, 1.0); + case BEND_EAST_SOUTH_UP -> Shapes.create(0.75, 0.125, 0.125, 1.0, 1.0, 1.0); case BEND_EAST_UP_NORTH -> Shapes.create(0.75, 0.125, 0.0, 1.0, 1.0, 0.875); - case BEND_EAST_NORTH_DOWN -> Shapes.create(0.75, 0.125, 0.0, 1.0, 1.0, 0.875); + case BEND_EAST_NORTH_DOWN -> Shapes.create(0.75, 0.0, 0.0, 1.0, 0.875, 0.875); - case BEND_SOUTH_DOWN_WEST -> Shapes.create(0.125, 0.125, 0.75, 1.0, 1.0, 1.0); - case BEND_SOUTH_WEST_UP -> Shapes.create(0.125, 0.125, 0.75, 1.0, 1.0, 1.0); + case BEND_SOUTH_DOWN_WEST -> Shapes.create(0.0, 0.0, 0.75, 0.875, 0.875, 1.0); + case BEND_SOUTH_WEST_UP -> Shapes.create(0.0, 0.125, 0.75, 0.875, 1.0, 1.0); case BEND_SOUTH_UP_EAST -> Shapes.create(0.125, 0.125, 0.75, 1.0, 1.0, 1.0); - case BEND_SOUTH_EAST_DOWN -> Shapes.create(0.125, 0.125, 0.75, 1.0, 1.0, 1.0); + case BEND_SOUTH_EAST_DOWN -> Shapes.create(0.125, 0.0, 0.75, 1.0, 0.875, 1.0); - case BEND_WEST_DOWN_NORTH -> Shapes.create(0.0, 0.125, 0.125, 0.25, 1.0, 1.0); - case BEND_WEST_NORTH_UP -> Shapes.create(0.0, 0.125, 0.125, 0.25, 1.0, 1.0); + case BEND_WEST_DOWN_NORTH -> Shapes.create(0.0, 0.0, 0.0, 0.25, 0.875, 0.875); + case BEND_WEST_NORTH_UP -> Shapes.create(0.0, 0.125, 0.0, 0.25, 1.0, 0.875); case BEND_WEST_UP_SOUTH -> Shapes.create(0.0, 0.125, 0.125, 0.25, 1.0, 1.0); - case BEND_WEST_SOUTH_DOWN -> Shapes.create(0.0, 0.125, 0.125, 0.25, 1.0, 1.0); + case BEND_WEST_SOUTH_DOWN -> Shapes.create(0.0, 0.0, 0.125, 0.25, 0.875, 1.0); case EDGE_OUTSIDE_DOWN_NORTH_UP_SOUTH -> Shapes.create(0.125, 0.0, 0.75, 0.875, 0.25, 1.0); case EDGE_OUTSIDE_DOWN_EAST_UP_WEST -> Shapes.create(0.0, 0.0, 0.125, 0.25, 0.25, 0.875);