diff --git a/gradle.properties b/gradle.properties index c96b861c6..b24d636d3 100644 --- a/gradle.properties +++ b/gradle.properties @@ -22,10 +22,10 @@ fabric.loom.multiProjectOptimisation=true spasm_version = 0.2.2 # Mod Properties - mod_version = 2.0.0-alpha.4 + mod_version = 2.0.0-alpha.4.1 maven_group = net.modificationstation archives_base_name = StationAPI # Test properties - modmenu_version = 1.8.5-beta.9 + modmenu_version = 1.8.5-beta.11 rc_version = 0.5.4 \ No newline at end of file diff --git a/src/test/java/net/modificationstation/sltest/block/Blocks.java b/src/test/java/net/modificationstation/sltest/block/Blocks.java index 882fd7902..3c2929a01 100644 --- a/src/test/java/net/modificationstation/sltest/block/Blocks.java +++ b/src/test/java/net/modificationstation/sltest/block/Blocks.java @@ -7,6 +7,8 @@ import net.modificationstation.stationapi.api.event.registry.BlockRegistryEvent; import net.modificationstation.stationapi.api.mod.entrypoint.EntrypointManager; import net.modificationstation.stationapi.api.template.block.TemplateBlock; +import net.modificationstation.stationapi.api.template.block.TemplateLeavesBlock; +import net.modificationstation.stationapi.api.template.block.TemplateLogBlock; import net.modificationstation.stationapi.api.util.Identifier; import java.lang.invoke.MethodHandles; @@ -25,7 +27,9 @@ public enum Blocks { ALTAR("altar", "altar", id -> new BlockAltar(id, Material.STONE).setHardness(3)), VARIATION_BLOCK("variation_block", "variationBlock", id -> new VariationBlock(id, Material.STONE).setHardness(.5F).setSoundGroup(Block.DEFAULT_SOUND_GROUP).disableAutoItemRegistration()), EMISSION_CHECKER("emission_checker", "emissionChecker", LampBlock::new), - INDISPENSABLE_BLOCK("indispensable_block", "indispensableBlock", IndispensableBlock::new); + INDISPENSABLE_BLOCK("indispensable_block", "indispensableBlock", IndispensableBlock::new), + MODDED_LEAVES("modded_leaves", "moddedLeaves", id -> new TemplateLeavesBlock(id, 52)), + MODDED_LOG("modded_log", "moddedLog", TemplateLogBlock::new); private final Runnable register; private Block block; diff --git a/src/test/java/net/modificationstation/sltest/level/gen/ChunkListener.java b/src/test/java/net/modificationstation/sltest/level/gen/ChunkListener.java index f636ae32a..8d68171e9 100644 --- a/src/test/java/net/modificationstation/sltest/level/gen/ChunkListener.java +++ b/src/test/java/net/modificationstation/sltest/level/gen/ChunkListener.java @@ -1,6 +1,8 @@ package net.modificationstation.sltest.level.gen; import net.mine_diver.unsafeevents.listener.EventListener; +import net.minecraft.block.Block; +import net.modificationstation.sltest.block.Blocks; import net.modificationstation.stationapi.api.event.world.gen.WorldGenEvent; public class ChunkListener { @@ -11,5 +13,10 @@ public void populate(WorldGenEvent.ChunkDecoration event) { // for (int z = 0; z < 16; z++) // if ((event.biome == Biome.FOREST || event.biome == Biome.SEASONAL_FOREST) && event.random.nextBoolean()) // event.level.setTile(event.x + x, 90, event.z + z, BlockBase.DIAMOND_BLOCK.id); + // Modded leaves and log test + event.world.setBlock(event.x + 8, 100, event.z + 8, Blocks.MODDED_LOG.get().id); +// event.world.setBlock(event.x + 1, 100, event.z, Block.LEAVES.id); +// event.world.setBlock(event.x + 2, 100, event.z, Blocks.MODDED_LEAVES.get().id); +// event.world.setBlock(event.x + 3, 100, event.z, Block.LEAVES.id); } } diff --git a/station-api-base/src/main/java/net/modificationstation/stationapi/api/util/Namespace.java b/station-api-base/src/main/java/net/modificationstation/stationapi/api/util/Namespace.java index a8dfb178d..b1fc1d339 100644 --- a/station-api-base/src/main/java/net/modificationstation/stationapi/api/util/Namespace.java +++ b/station-api-base/src/main/java/net/modificationstation/stationapi/api/util/Namespace.java @@ -25,17 +25,18 @@ import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; -import java.nio.file.FileSystems; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; +import java.nio.file.*; +import java.util.Collections; +import java.util.Map; import java.util.function.Function; import java.util.function.Supplier; import java.util.stream.Stream; +import java.util.zip.ZipError; @Slf4j public final class Namespace implements Comparable<@NotNull Namespace> { private static final boolean CHECK_MISSING_MODS = false; + private static final Map CREATE_FILESYSTEM_ARGS = Collections.singletonMap("create", "true"); @NotNull private static final Cache<@NotNull String, @NotNull Namespace> CACHE = Caffeine.newBuilder().softValues().build(); @@ -77,9 +78,24 @@ public final class Namespace implements Comparable<@NotNull Namespace> { // i'm so sorry if (Files.isRegularFile(callerPath)) { // regular case final URI callerRoot; - try (val fs = FileSystems.newFileSystem(callerPath)) { + val uri = callerPath.toUri(); + try { + FileSystem fs; + boolean created = false; + val jarUri = new URI("jar:" + uri.getScheme(), uri.getHost(), uri.getPath(), uri.getFragment()); + try { + fs = FileSystems.newFileSystem(jarUri, CREATE_FILESYSTEM_ARGS); + created = true; + } catch (FileSystemAlreadyExistsException ignore2) { + fs = FileSystems.getFileSystem(jarUri); + } catch (IOException | ZipError e) { + throw new IOException("Error accessing " + uri + ": " + e, e); + } callerRoot = fs.getPath("/").toUri(); - } catch (IOException e) { + if (created) { + fs.close(); + } + } catch (IOException | URISyntaxException e) { throw new RuntimeException(e); } candidates = mods diff --git a/station-blocks-v0/src/main/java/net/modificationstation/stationapi/api/registry/tag/BlockTags.java b/station-blocks-v0/src/main/java/net/modificationstation/stationapi/api/registry/tag/BlockTags.java index 19722b49c..e0169befa 100644 --- a/station-blocks-v0/src/main/java/net/modificationstation/stationapi/api/registry/tag/BlockTags.java +++ b/station-blocks-v0/src/main/java/net/modificationstation/stationapi/api/registry/tag/BlockTags.java @@ -11,6 +11,7 @@ public final class BlockTags { public static final TagKey LOGS = of("logs"), + LEAVES = of("leaves"), PLANKS = of("planks"), INFINIBURN = of("infiniburn"); diff --git a/station-blocks-v0/src/main/java/net/modificationstation/stationapi/mixin/block/LeavesBlockMixin.java b/station-blocks-v0/src/main/java/net/modificationstation/stationapi/mixin/block/LeavesBlockMixin.java new file mode 100644 index 000000000..cc5bbf2ff --- /dev/null +++ b/station-blocks-v0/src/main/java/net/modificationstation/stationapi/mixin/block/LeavesBlockMixin.java @@ -0,0 +1,28 @@ +package net.modificationstation.stationapi.mixin.block; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import net.minecraft.block.Block; +import net.minecraft.block.LeavesBlock; +import net.minecraft.world.World; +import net.modificationstation.stationapi.api.block.BlockState; +import net.modificationstation.stationapi.api.registry.tag.BlockTags; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(LeavesBlock.class) +public class LeavesBlockMixin { + + @WrapOperation(method = "onTick", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/World;getBlockId(III)I")) + private int makeModdedLogsAndLeavesWork(World instance, int x, int y, int z, Operation original) { + BlockState state = instance.getBlockState(x, y, z); + if (state.isIn(BlockTags.LOGS)) { + return Block.LOG.id; + } + if (state.isIn(BlockTags.LEAVES)) { + return Block.LEAVES.id; + } + + return original.call(instance, x, y, z); + } +} diff --git a/station-blocks-v0/src/main/resources/station-blocks-v0.mixins.json b/station-blocks-v0/src/main/resources/station-blocks-v0.mixins.json index 018fece12..109b74423 100644 --- a/station-blocks-v0/src/main/resources/station-blocks-v0.mixins.json +++ b/station-blocks-v0/src/main/resources/station-blocks-v0.mixins.json @@ -7,6 +7,7 @@ "BlockItemMixin", "BlockMixin", "FireBlockMixin", + "LeavesBlockMixin", "SecondaryBlockItemMixin", "StatsMixin" ], diff --git a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/impl/world/StationClientWorld.java b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/impl/world/StationClientWorld.java new file mode 100644 index 000000000..e172fcc99 --- /dev/null +++ b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/impl/world/StationClientWorld.java @@ -0,0 +1,5 @@ +package net.modificationstation.stationapi.impl.world; + +public interface StationClientWorld { + boolean stationAPI$isModded(); +} diff --git a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/impl/world/chunk/FlattenedChunk.java b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/impl/world/chunk/FlattenedChunk.java index c62ad1a03..0b28e0e3a 100644 --- a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/impl/world/chunk/FlattenedChunk.java +++ b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/impl/world/chunk/FlattenedChunk.java @@ -11,6 +11,7 @@ import net.minecraft.world.LightType; import net.minecraft.world.World; import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.dimension.Dimension; import net.modificationstation.stationapi.api.StationAPI; import net.modificationstation.stationapi.api.block.BlockState; import net.modificationstation.stationapi.api.block.States; @@ -144,7 +145,7 @@ public void setLight(LightType type, int x, int y, int z, int light) { @Override public int getLight(int x, int y, int z, int light) { ChunkSection section = getSection(y); - int lightLevel = section == null ? 15 : section.getLight(LightType.SKY, x, y & 15, z); + int lightLevel = section == null ? (world.dimension.field_2177 /* hasCeiling */ ? 0 : 15) : section.getLight(LightType.SKY, x, y & 15, z); if (lightLevel > 0) { field_953 = true; } diff --git a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/CaveGenBaseMixin.java b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/CaveGenBaseMixin.java index 995e6f6ed..7af267dce 100644 --- a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/CaveGenBaseMixin.java +++ b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/CaveGenBaseMixin.java @@ -20,6 +20,9 @@ public void stationapi_setWorld(World world) { @Override @Unique public World stationapi_getWorld() { + if (stationapi_world == null) { + throw new RuntimeException("stationapi_world is null, use CaveGenBaseImpl.stationapi_setWorld in your custom ChunkSource constructor to fix."); + } return stationapi_world; } } diff --git a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/client/ClientWorldMixin.java b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/client/ClientWorldMixin.java index de7741532..ebf3952fa 100644 --- a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/client/ClientWorldMixin.java +++ b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/client/ClientWorldMixin.java @@ -2,11 +2,14 @@ import net.minecraft.block.Block; import net.minecraft.class_454; +import net.minecraft.client.network.ClientNetworkHandler; import net.minecraft.world.World; import net.minecraft.world.dimension.Dimension; import net.minecraft.world.dimension.DimensionData; import net.modificationstation.stationapi.api.block.BlockState; +import net.modificationstation.stationapi.api.network.ModdedPacketHandler; import net.modificationstation.stationapi.impl.client.world.ClientBlockChange; +import net.modificationstation.stationapi.impl.world.StationClientWorld; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; @@ -17,13 +20,25 @@ import java.util.LinkedList; @Mixin(class_454.class) -abstract class ClientWorldMixin extends World { +abstract class ClientWorldMixin extends World implements StationClientWorld { + @Unique boolean isModded = false; + @Shadow private LinkedList field_1722; private ClientWorldMixin(DimensionData arg, String string, Dimension arg2, long l) { super(arg, string, arg2, l); } + @Inject(method = "", at = @At("RETURN")) + void mpCrashWorkaround(ClientNetworkHandler handler, long l, int i, CallbackInfo ci) { + isModded = ((ModdedPacketHandler) handler).isModded(); + } + + @Override + public boolean stationAPI$isModded() { + return isModded; + } + @ModifyConstant(method = "method_1494(IIZ)V", constant = @Constant(intValue = 0)) private int stationapi_changeMinHeight(int value) { return getBottomY(); diff --git a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/client/MultiplayerChunkCacheMixin.java b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/client/MultiplayerChunkCacheMixin.java index d4501fa00..892bebd0f 100644 --- a/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/client/MultiplayerChunkCacheMixin.java +++ b/station-flattening-v0/src/main/java/net/modificationstation/stationapi/mixin/flattening/client/MultiplayerChunkCacheMixin.java @@ -7,6 +7,7 @@ import net.minecraft.world.World; import net.minecraft.world.chunk.Chunk; import net.modificationstation.stationapi.api.network.ModdedPacketHandler; +import net.modificationstation.stationapi.impl.world.StationClientWorld; import net.modificationstation.stationapi.impl.world.chunk.FlattenedChunk; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; @@ -28,8 +29,7 @@ class MultiplayerChunkCacheMixin { cancellable = true ) public void stationapi_loadChunk(int i, int j, CallbackInfoReturnable cir) { - //noinspection deprecation - if (!((ModdedPacketHandler) ((Minecraft) FabricLoader.getInstance().getGameInstance()).getNetworkHandler()).isModded()) + if (!((StationClientWorld) field_2555).stationAPI$isModded()) return; ChunkPos vec2i = new ChunkPos(i, j); FlattenedChunk chunk = new FlattenedChunk(this.field_2555, i, j); diff --git a/station-items-v0/src/main/java/net/modificationstation/stationapi/api/client/TooltipHelper.java b/station-items-v0/src/main/java/net/modificationstation/stationapi/api/client/TooltipHelper.java index ac23c182c..951d0f716 100644 --- a/station-items-v0/src/main/java/net/modificationstation/stationapi/api/client/TooltipHelper.java +++ b/station-items-v0/src/main/java/net/modificationstation/stationapi/api/client/TooltipHelper.java @@ -2,6 +2,7 @@ import net.minecraft.client.gui.screen.ingame.HandledScreen; import net.minecraft.entity.player.PlayerInventory; +import net.minecraft.item.BlockItem; import net.minecraft.item.ItemStack; import net.modificationstation.stationapi.api.StationAPI; import net.modificationstation.stationapi.api.client.event.gui.screen.container.TooltipBuildEvent; @@ -16,8 +17,16 @@ public class TooltipHelper { */ public static ArrayList getTooltipForItemStack(String originalTooltip, ItemStack itemStack, PlayerInventory playerInventory, HandledScreen container) { ArrayList newTooltip; + CustomTooltipProvider provider = null; - if (itemStack.getItem() instanceof CustomTooltipProvider provider) { + if (itemStack.getItem() instanceof CustomTooltipProvider itemProvider) { + provider = itemProvider; + } + else if (itemStack.getItem() instanceof BlockItem blockItem && blockItem.getBlock() instanceof CustomTooltipProvider blockProvider) { + provider = blockProvider; + } + + if (provider != null) { newTooltip = new ArrayList<>(Arrays.asList(provider.getTooltip(itemStack, originalTooltip))); } else { diff --git a/station-items-v0/src/main/java/net/modificationstation/stationapi/api/client/item/CustomTooltipProvider.java b/station-items-v0/src/main/java/net/modificationstation/stationapi/api/client/item/CustomTooltipProvider.java index 5f74e43a2..9bc1c495e 100644 --- a/station-items-v0/src/main/java/net/modificationstation/stationapi/api/client/item/CustomTooltipProvider.java +++ b/station-items-v0/src/main/java/net/modificationstation/stationapi/api/client/item/CustomTooltipProvider.java @@ -1,7 +1,16 @@ package net.modificationstation.stationapi.api.client.item; import net.minecraft.item.ItemStack; +import org.jetbrains.annotations.NotNull; +/** + * Can be implemented on Items, BlockItems and Blocks. + * BlockItems take precedence over Blocks if both have this implemented. + */ public interface CustomTooltipProvider { - String[] getTooltip(ItemStack stack, String originalTooltip); + + /** + * @return An array of Strings, each new array entry is a new line. Supports formatting codes. + */ + @NotNull String[] getTooltip(ItemStack stack, String originalTooltip); } diff --git a/station-items-v0/src/main/java/net/modificationstation/stationapi/mixin/item/CropBlockMixin.java b/station-items-v0/src/main/java/net/modificationstation/stationapi/mixin/item/CropBlockMixin.java new file mode 100644 index 000000000..2d02b8a9d --- /dev/null +++ b/station-items-v0/src/main/java/net/modificationstation/stationapi/mixin/item/CropBlockMixin.java @@ -0,0 +1,22 @@ +package net.modificationstation.stationapi.mixin.item; + +import net.minecraft.block.CropBlock; +import net.minecraft.world.World; +import net.modificationstation.stationapi.api.block.BlockState; +import net.modificationstation.stationapi.api.block.StationBlock; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +@Mixin(CropBlock.class) +public abstract class CropBlockMixin implements StationBlock { + + @Shadow public abstract void method_996(World world, int i, int j, int k); + + @Override + public boolean onBonemealUse(World world, int x, int y, int z, BlockState state) { + if (!world.isRemote) { + method_996(world, x, y, z); // Full grows crop. + } + return true; + } +} diff --git a/station-items-v0/src/main/java/net/modificationstation/stationapi/mixin/item/SaplingBlockMixin.java b/station-items-v0/src/main/java/net/modificationstation/stationapi/mixin/item/SaplingBlockMixin.java new file mode 100644 index 000000000..6ff61d71b --- /dev/null +++ b/station-items-v0/src/main/java/net/modificationstation/stationapi/mixin/item/SaplingBlockMixin.java @@ -0,0 +1,23 @@ +package net.modificationstation.stationapi.mixin.item; + +import net.minecraft.block.SaplingBlock; +import net.minecraft.world.World; +import net.modificationstation.stationapi.api.block.BlockState; +import net.modificationstation.stationapi.api.block.StationBlock; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; + +import java.util.Random; + +@Mixin(SaplingBlock.class) +public abstract class SaplingBlockMixin implements StationBlock { + @Shadow public abstract void method_533(World world, int x, int y, int z, Random random); + + @Override + public boolean onBonemealUse(World world, int x, int y, int z, BlockState state) { + if (!world.isRemote) { + method_533(world, x, y, z, world.field_214); + } + return true; + } +} diff --git a/station-items-v0/src/main/resources/station-items-v0.mixins.json b/station-items-v0/src/main/resources/station-items-v0.mixins.json index 2fd54f374..a014b3d47 100644 --- a/station-items-v0/src/main/resources/station-items-v0.mixins.json +++ b/station-items-v0/src/main/resources/station-items-v0.mixins.json @@ -5,6 +5,7 @@ "compatibilityLevel": "JAVA_17", "mixins": [ "BlockMixin", + "CropBlockMixin", "DyeItemMixin", "EntityAccessor", "EntityMixin", @@ -13,6 +14,7 @@ "ItemStackMixin", "PlayerEntityMixin", "PlayerInventoryMixin", + "SaplingBlockMixin", "ScreenHandlerMixin", "StatsMixin", "dispenser.block.DispenserBlockMixin", diff --git a/station-maths-v0/src/main/java/net/modificationstation/stationapi/api/util/math/Direction.java b/station-maths-v0/src/main/java/net/modificationstation/stationapi/api/util/math/Direction.java index a88c0aab5..3846a6585 100644 --- a/station-maths-v0/src/main/java/net/modificationstation/stationapi/api/util/math/Direction.java +++ b/station-maths-v0/src/main/java/net/modificationstation/stationapi/api/util/math/Direction.java @@ -93,7 +93,7 @@ private static Direction[] listClosest(Direction first, Direction second, Direct public static Direction transform(Matrix4f matrix, Direction direction) { Vec3i vec3i = direction.getVector(); - Vector4f vector4f = new Vector4f(vec3i.getX(), vec3i.getY(), vec3i.getZ(), 0.0f); + Vec4f vector4f = new Vec4f(vec3i.getX(), vec3i.getY(), vec3i.getZ(), 0.0f); vector4f.transform(matrix); return Direction.getFacing(vector4f.getX(), vector4f.getY(), vector4f.getZ()); } diff --git a/station-maths-v0/src/main/java/net/modificationstation/stationapi/api/util/math/Vec3f.java b/station-maths-v0/src/main/java/net/modificationstation/stationapi/api/util/math/Vec3f.java index fc75d2ac6..d590082f5 100644 --- a/station-maths-v0/src/main/java/net/modificationstation/stationapi/api/util/math/Vec3f.java +++ b/station-maths-v0/src/main/java/net/modificationstation/stationapi/api/util/math/Vec3f.java @@ -23,7 +23,7 @@ public Vec3f(float x, float y, float z) { this.z = z; } - public Vec3f(Vector4f vec) { + public Vec3f(Vec4f vec) { this(vec.getX(), vec.getY(), vec.getZ()); } diff --git a/station-maths-v0/src/main/java/net/modificationstation/stationapi/api/util/math/Vector4f.java b/station-maths-v0/src/main/java/net/modificationstation/stationapi/api/util/math/Vec4f.java similarity index 93% rename from station-maths-v0/src/main/java/net/modificationstation/stationapi/api/util/math/Vector4f.java rename to station-maths-v0/src/main/java/net/modificationstation/stationapi/api/util/math/Vec4f.java index e6a51b124..60407584d 100644 --- a/station-maths-v0/src/main/java/net/modificationstation/stationapi/api/util/math/Vector4f.java +++ b/station-maths-v0/src/main/java/net/modificationstation/stationapi/api/util/math/Vec4f.java @@ -1,21 +1,21 @@ package net.modificationstation.stationapi.api.util.math; -public class Vector4f { +public class Vec4f { private float x; private float y; private float z; private float w; - public Vector4f() {} + public Vec4f() {} - public Vector4f(float x, float y, float z, float w) { + public Vec4f(float x, float y, float z, float w) { this.x = x; this.y = y; this.z = z; this.w = w; } - public Vector4f(Vec3f vector) { + public Vec4f(Vec3f vector) { this(vector.getX(), vector.getY(), vector.getZ(), 1.0F); } @@ -23,7 +23,7 @@ public boolean equals(Object o) { if (this == o) { return true; } else if (o != null && this.getClass() == o.getClass()) { - Vector4f vector4f = (Vector4f)o; + Vec4f vector4f = (Vec4f)o; if (Float.compare(vector4f.x, this.x) != 0) { return false; } else if (Float.compare(vector4f.y, this.y) != 0) { @@ -75,7 +75,7 @@ public void set(float x, float y, float z, float w) { this.w = w; } - public float dotProduct(Vector4f other) { + public float dotProduct(Vec4f other) { return this.x * other.x + this.y * other.y + this.z * other.z + this.w * other.w; } diff --git a/station-maths-v0/src/main/java/net/modificationstation/stationapi/api/util/math/Vector2f.java b/station-maths-v0/src/main/java/net/modificationstation/stationapi/api/util/math/Vector2f.java deleted file mode 100644 index 0afe79ebd..000000000 --- a/station-maths-v0/src/main/java/net/modificationstation/stationapi/api/util/math/Vector2f.java +++ /dev/null @@ -1,23 +0,0 @@ -package net.modificationstation.stationapi.api.util.math; - -public class Vector2f { - public static final Vector2f ZERO = new Vector2f(0.0F, 0.0F); - public static final Vector2f SOUTH_EAST_UNIT = new Vector2f(1.0F, 1.0F); - public static final Vector2f EAST_UNIT = new Vector2f(1.0F, 0.0F); - public static final Vector2f WEST_UNIT = new Vector2f(-1.0F, 0.0F); - public static final Vector2f SOUTH_UNIT = new Vector2f(0.0F, 1.0F); - public static final Vector2f NORTH_UNIT = new Vector2f(0.0F, -1.0F); - public static final Vector2f MAX_SOUTH_EAST = new Vector2f(Float.MAX_VALUE, Float.MAX_VALUE); - public static final Vector2f MIN_SOUTH_EAST = new Vector2f(Float.MIN_VALUE, Float.MIN_VALUE); - public final float x; - public final float y; - - public Vector2f(float x, float y) { - this.x = x; - this.y = y; - } - - public boolean equals(Vector2f other) { - return this.x == other.x && this.y == other.y; - } -} diff --git a/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/render/model/BakedQuadFactory.java b/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/render/model/BakedQuadFactory.java index 146337c3e..ce7d42962 100644 --- a/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/render/model/BakedQuadFactory.java +++ b/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/api/client/render/model/BakedQuadFactory.java @@ -45,13 +45,13 @@ public static ModelElementTexture uvLock(ModelElementTexture texture, Direction Matrix4f matrix4f = AffineTransformations.uvLock(rotation, orientation, () -> "Unable to resolve UVLock for model: " + modelId).getMatrix(); float f = texture.getU(texture.getDirectionIndex(0)); float g = texture.getV(texture.getDirectionIndex(0)); - Vector4f vector4f = new Vector4f(f / 16.0F, g / 16.0F, 0.0F, 1.0F); + Vec4f vector4f = new Vec4f(f / 16.0F, g / 16.0F, 0.0F, 1.0F); vector4f.transform(matrix4f); float h = 16.0F * vector4f.getX(); float i = 16.0F * vector4f.getY(); float j = texture.getU(texture.getDirectionIndex(2)); float k = texture.getV(texture.getDirectionIndex(2)); - Vector4f vector4f2 = new Vector4f(j / 16.0F, k / 16.0F, 0.0F, 1.0F); + Vec4f vector4f2 = new Vec4f(j / 16.0F, k / 16.0F, 0.0F, 1.0F); vector4f2.transform(matrix4f); float l = 16.0F * vector4f2.getX(); float m = 16.0F * vector4f2.getY(); @@ -166,7 +166,7 @@ public void transformVertex(Vec3f vertex, AffineTransformation transformation) { } private void transformVertex(Vec3f vertex, Vec3f origin, Matrix4f transformationMatrix, Vec3f scale) { - Vector4f vector4f = new Vector4f(vertex.getX() - origin.getX(), vertex.getY() - origin.getY(), vertex.getZ() - origin.getZ(), 1.0F); + Vec4f vector4f = new Vec4f(vertex.getX() - origin.getX(), vertex.getY() - origin.getY(), vertex.getZ() - origin.getZ(), 1.0F); vector4f.transform(transformationMatrix); vector4f.multiplyComponentwise(scale); vertex.set(vector4f.getX() + origin.getX(), vector4f.getY() + origin.getY(), vector4f.getZ() + origin.getZ()); diff --git a/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/impl/client/render/StationTessellatorImpl.java b/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/impl/client/render/StationTessellatorImpl.java index b4b9c75ee..b7ebc8567 100644 --- a/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/impl/client/render/StationTessellatorImpl.java +++ b/station-renderer-api-v0/src/main/java/net/modificationstation/stationapi/impl/client/render/StationTessellatorImpl.java @@ -7,7 +7,7 @@ import net.modificationstation.stationapi.api.util.math.Direction; import net.modificationstation.stationapi.api.util.math.Matrix4f; import net.modificationstation.stationapi.api.util.math.Vec3f; -import net.modificationstation.stationapi.api.util.math.Vector4f; +import net.modificationstation.stationapi.api.util.math.Vec4f; import net.modificationstation.stationapi.mixin.render.client.TessellatorAccessor; import java.nio.ByteBuffer; @@ -20,7 +20,7 @@ public class StationTessellatorImpl implements StationTessellator { private final Tessellator self; private final TessellatorAccessor access; private final int[] fastVertexData = new int[32]; - private final Vector4f damageUV = new Vector4f(); + private final Vec4f damageUV = new Vec4f(); public StationTessellatorImpl(Tessellator tessellator) { self = tessellator; diff --git a/station-vanilla-checker-v0/src/main/java/net/modificationstation/stationapi/impl/server/network/ServerVanillaChecker.java b/station-vanilla-checker-v0/src/main/java/net/modificationstation/stationapi/impl/server/network/ServerVanillaChecker.java index 6720fea60..cea80072b 100644 --- a/station-vanilla-checker-v0/src/main/java/net/modificationstation/stationapi/impl/server/network/ServerVanillaChecker.java +++ b/station-vanilla-checker-v0/src/main/java/net/modificationstation/stationapi/impl/server/network/ServerVanillaChecker.java @@ -35,7 +35,7 @@ public class ServerVanillaChecker { private static void onPlayerLogin(PlayerAttemptLoginEvent event) { if ((event.loginHelloPacket.worldSeed & MASK) == MASK) { Map mods = new HashMap<>(); - FabricLoader.getInstance().getAllMods().forEach(modContainer -> mods.put(modContainer.getMetadata().getName(), modContainer.getMetadata().getVersion().getFriendlyString())); + FabricLoader.getInstance().getAllMods().forEach(modContainer -> mods.put(modContainer.getMetadata().getId(), modContainer.getMetadata().getVersion().getFriendlyString())); ((ModdedPacketHandlerSetter) event.serverLoginNetworkHandler).setModded(mods); } else if (!CLIENT_REQUIRED_MODS.isEmpty()) { diff --git a/station-worldgen-api-v0/src/main/java/net/modificationstation/stationapi/mixin/worldgen/BiomeMixin.java b/station-worldgen-api-v0/src/main/java/net/modificationstation/stationapi/mixin/worldgen/BiomeMixin.java index a732a4b37..2a873d112 100644 --- a/station-worldgen-api-v0/src/main/java/net/modificationstation/stationapi/mixin/worldgen/BiomeMixin.java +++ b/station-worldgen-api-v0/src/main/java/net/modificationstation/stationapi/mixin/worldgen/BiomeMixin.java @@ -136,7 +136,7 @@ public List getFeatures() { @Override public void setNoDimensionFeatures(boolean noDimensionFeatures) { - this.noDimensionFeatures = false; + this.noDimensionFeatures = noDimensionFeatures; } @Override