Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
1e9b5b3
Switched from HMI to RetroCommands
mineLdiver Dec 23, 2024
4949fcc
Removed broken reimplementation of Divisor's old PlayerAPI. (#139)
mineLdiver Dec 28, 2024
e8f2f81
Removed Indigo renderer (#140)
mineLdiver Dec 28, 2024
324abc7
Updated UnsafeEvents
mineLdiver Dec 28, 2024
c8db80a
ContextVariable
mineLdiver Jan 14, 2025
1ddc433
ContextVariable#get
mineLdiver Jan 14, 2025
212e775
Feature/register helper (#146)
mineLdiver Feb 9, 2025
1b21426
cleanup/java-hacks (#145)
mineLdiver Feb 9, 2025
622c50e
Fix a NPE in shears override
mineLdiver Feb 9, 2025
82dff33
Fix a NPE in FuelRegistry
mineLdiver Feb 9, 2025
1fe0abb
Added StationFlatteningBlock#onStateReplaced
mineLdiver Feb 10, 2025
10d73c3
Fixed #159
mineLdiver Feb 10, 2025
eeb31eb
Change version
mineLdiver Feb 10, 2025
2d3c037
Merge pull request #165 from ThexXTURBOXx/develop
ThexXTURBOXx Feb 25, 2025
746d5de
Update modmenu
calmilamsy Mar 20, 2025
c10cd34
Merge pull request #168
calmilamsy May 17, 2025
effa191
Make stapi get angree (#169)
calmilamsy May 17, 2025
a7c5633
Update BiomeMixin.java (#196)
calmilamsy May 19, 2025
5c048d2
Add Block Support to CustomTooltipProvider (#187)
calmilamsy Jun 1, 2025
866b19b
Make Leaves' Log Check Work With Modded Logs and Leaves (#186)
calmilamsy Jun 1, 2025
466818f
Fix (#185)
calmilamsy Jun 1, 2025
5f05015
FUCK (#200)
calmilamsy Jun 17, 2025
6dd8364
Why mine (#197)
calmilamsy Jun 17, 2025
10ddd85
Potentially make mine scream (#188)
calmilamsy Jun 17, 2025
8dd3a5c
Implement onBonemealUse on Vanilla Crops (#170)
calmilamsy Jun 17, 2025
abc3612
Fixed cal L moment (cascaded test worldgen)
mineLdiver Jun 18, 2025
02bb43a
Change version
mineLdiver Jun 18, 2025
fba977b
Merge branch 'master' into develop
mineLdiver Jun 18, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -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
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down
Original file line number Diff line number Diff line change
@@ -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 {
Expand All @@ -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);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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<String, String> CREATE_FILESYSTEM_ARGS = Collections.singletonMap("create", "true");

@NotNull
private static final Cache<@NotNull String, @NotNull Namespace> CACHE = Caffeine.newBuilder().softValues().build();
Expand Down Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
public final class BlockTags {
public static final TagKey<Block>
LOGS = of("logs"),
LEAVES = of("leaves"),
PLANKS = of("planks"),
INFINIBURN = of("infiniburn");

Expand Down
Original file line number Diff line number Diff line change
@@ -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<Integer> 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);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
"BlockItemMixin",
"BlockMixin",
"FireBlockMixin",
"LeavesBlockMixin",
"SecondaryBlockItemMixin",
"StatsMixin"
],
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package net.modificationstation.stationapi.impl.world;

public interface StationClientWorld {
boolean stationAPI$isModded();
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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 = "<init>", 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();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -28,8 +29,7 @@ class MultiplayerChunkCacheMixin {
cancellable = true
)
public void stationapi_loadChunk(int i, int j, CallbackInfoReturnable<Chunk> 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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -16,8 +17,16 @@ public class TooltipHelper {
*/
public static ArrayList<String> getTooltipForItemStack(String originalTooltip, ItemStack itemStack, PlayerInventory playerInventory, HandledScreen container) {
ArrayList<String> 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 {
Expand Down
Original file line number Diff line number Diff line change
@@ -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);
}
Original file line number Diff line number Diff line change
@@ -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;
}
}
Original file line number Diff line number Diff line change
@@ -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;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
"compatibilityLevel": "JAVA_17",
"mixins": [
"BlockMixin",
"CropBlockMixin",
"DyeItemMixin",
"EntityAccessor",
"EntityMixin",
Expand All @@ -13,6 +14,7 @@
"ItemStackMixin",
"PlayerEntityMixin",
"PlayerInventoryMixin",
"SaplingBlockMixin",
"ScreenHandlerMixin",
"StatsMixin",
"dispenser.block.DispenserBlockMixin",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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());
}

Expand Down
Loading