diff --git a/src/main/java/space/eptaproject/vmodaddon/Config.java b/src/main/java/space/eptaproject/vmodaddon/Config.java index b5bfd5f..c94e88f 100644 --- a/src/main/java/space/eptaproject/vmodaddon/Config.java +++ b/src/main/java/space/eptaproject/vmodaddon/Config.java @@ -1,7 +1,5 @@ package space.eptaproject.vmodaddon; -import it.unimi.dsi.fastutil.ints.IntArrayList; -import it.unimi.dsi.fastutil.ints.IntList; import it.unimi.dsi.fastutil.objects.ObjectArrayList; import it.unimi.dsi.fastutil.objects.ObjectImmutableList; import net.minecraft.resources.ResourceLocation; @@ -17,6 +15,8 @@ public class Config { public static final ForgeConfigSpec.ConfigValue> ITEM_BLACK_LIST; public static final ForgeConfigSpec.ConfigValue RESOURCE_LOCATION; + public static final ForgeConfigSpec.ConfigValue Suspension_Stiffness_LIMIT; + public static List parsedList = new ObjectArrayList<>(); private static List> ITEM = new ObjectImmutableList<>(new ArrayList<>()); public static ResourceLocation replace = Validator.RB; @@ -41,6 +41,7 @@ public class Config { Validator.RB.toString() ); + builder.pop(); builder.push("Inventory"); @@ -53,6 +54,14 @@ public class Config { obj -> obj instanceof String && ResourceLocation.isValidResourceLocation((String) obj) ); + builder.pop(); + + builder.push("TrackWork"); + + Suspension_Stiffness_LIMIT = builder + .comment("track suspension stiffness") + .defineInRange("SuspensionStiffness", 4, 0, 20); + builder.pop(); COMMON_CONFIG = builder.build(); } diff --git a/src/main/java/space/eptaproject/vmodaddon/Vmodaddon.java b/src/main/java/space/eptaproject/vmodaddon/Vmodaddon.java index 678284b..f75c6d6 100644 --- a/src/main/java/space/eptaproject/vmodaddon/Vmodaddon.java +++ b/src/main/java/space/eptaproject/vmodaddon/Vmodaddon.java @@ -1,10 +1,7 @@ package space.eptaproject.vmodaddon; import com.mojang.logging.LogUtils; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.BlockItem; -import net.minecraft.world.item.Item; -import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.*; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockBehaviour; @@ -19,12 +16,11 @@ import net.minecraftforge.fml.config.ModConfig; import net.minecraftforge.fml.event.config.ModConfigEvent; import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; -import net.minecraftforge.registries.DeferredRegister; -import net.minecraftforge.registries.ForgeRegistries; import net.minecraftforge.registries.RegistryObject; import org.slf4j.Logger; import space.eptaproject.vmodaddon.block.TBB; import space.eptaproject.vmodaddon.block.TBBE; +import space.eptaproject.vmodaddon.util.ModRegistry; @Mod(Vmodaddon.MODID) public class Vmodaddon { @@ -33,28 +29,43 @@ public class Vmodaddon { private static final Logger LOGGER = LogUtils.getLogger(); - public static final DeferredRegister BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, MODID); - public static final DeferredRegister> BLOCK_ENTITIES = DeferredRegister.create(ForgeRegistries.BLOCK_ENTITY_TYPES, MODID); - public static final DeferredRegister ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, MODID); - public static final RegistryObject EXAMPLE_BLOCK = BLOCKS.register("example_block", () -> new Block(BlockBehaviour.Properties.of().mapColor(MapColor.STONE))); + public static final RegistryObject SHIP_VOID_BLOCK; - public static final RegistryObject TRAK_BUK = BLOCKS.register("tb", () -> new TBB(BlockBehaviour.Properties.of().mapColor(MapColor.STONE))); + public static final RegistryObject TRAK_BUK; - public static final RegistryObject> MY_BLOCK_ENTITY = BLOCK_ENTITIES.register("my_block_entity", - () -> BlockEntityType.Builder.of(TBBE::new, TRAK_BUK.get()).build(null)); + public static final RegistryObject> MY_BLOCK_ENTITY; + public static RegistryObject MY_BLOCK_ITEM; - public static final RegistryObject MY_BLOCK_ITEM = ITEMS.register("tb", - () -> new BlockItem(TRAK_BUK.get(), new Item.Properties())); + public static RegistryObject SHIP_VOID_ITEM; + + + public static final ModRegistry REGISTRY; + + public static final RegistryObject EXAMPLE_TAB; + + static { + REGISTRY = new ModRegistry(MODID); + + TRAK_BUK = REGISTRY.BLOCKS.register("track_b", () -> new TBB(BlockBehaviour.Properties.of().mapColor(MapColor.STONE))); + SHIP_VOID_BLOCK = REGISTRY.BLOCKS.register("ship_void", () -> new Block(BlockBehaviour.Properties.of().mapColor(MapColor.STONE))); + + MY_BLOCK_ENTITY = REGISTRY.BLOCK_ENTITIES.register("my_block_entity", () -> BlockEntityType.Builder.of(TBBE::new, TRAK_BUK.get()).build(null)); + + EXAMPLE_TAB = REGISTRY.TabBuilder() + .push((registry) -> { + MY_BLOCK_ITEM = registry.register("track_b", () -> new BlockItem(TRAK_BUK.get(), new Item.Properties())); + SHIP_VOID_ITEM = registry.register("ship_void", () -> new BlockItem(SHIP_VOID_BLOCK.get(), new Item.Properties())); + }) + .build("vmodaddon", Items.BEDROCK.getDefaultInstance()); + } public Vmodaddon() { IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); modEventBus.addListener(this::commonSetup); - BLOCKS.register(modEventBus); - BLOCK_ENTITIES.register(modEventBus); - ITEMS.register(modEventBus); + REGISTRY.register(modEventBus); MinecraftForge.EVENT_BUS.register(this); ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, Config.COMMON_CONFIG); diff --git a/src/main/java/space/eptaproject/vmodaddon/block/TBB.java b/src/main/java/space/eptaproject/vmodaddon/block/TBB.java index 03138f6..01b93b7 100644 --- a/src/main/java/space/eptaproject/vmodaddon/block/TBB.java +++ b/src/main/java/space/eptaproject/vmodaddon/block/TBB.java @@ -1,11 +1,11 @@ package space.eptaproject.vmodaddon.block; import com.simibubi.create.foundation.block.IBE; -import net.minecraft.world.level.block.HorizontalDirectionalBlock; +import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.entity.BlockEntityType; import space.eptaproject.vmodaddon.Vmodaddon; -public class TBB extends HorizontalDirectionalBlock implements IBE { +public class TBB extends Block implements IBE { public TBB(Properties properties) { super(properties); diff --git a/src/main/java/space/eptaproject/vmodaddon/block/TBBE.java b/src/main/java/space/eptaproject/vmodaddon/block/TBBE.java index 1e5d6fe..38c7cb7 100644 --- a/src/main/java/space/eptaproject/vmodaddon/block/TBBE.java +++ b/src/main/java/space/eptaproject/vmodaddon/block/TBBE.java @@ -3,7 +3,6 @@ package space.eptaproject.vmodaddon.block; import edn.stratodonut.trackwork.tracks.forces.PhysicsTrackController; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; -import net.minecraft.util.Mth; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; import org.valkyrienskies.core.api.ships.ServerShip; diff --git a/src/main/java/space/eptaproject/vmodaddon/mixin/MixinPlugin.java b/src/main/java/space/eptaproject/vmodaddon/mixin/MixinPlugin.java index 9d7ea5f..eec9204 100644 --- a/src/main/java/space/eptaproject/vmodaddon/mixin/MixinPlugin.java +++ b/src/main/java/space/eptaproject/vmodaddon/mixin/MixinPlugin.java @@ -86,6 +86,6 @@ public class MixinPlugin implements IMixinConfigPlugin { classNode.visibleAnnotations.add(newAnnotation); } - transformerInstanceHolder.get(KotlinOptimizationTransformer.class).transform(targetClassName, classNode, mixinClassName, mixinInfo); + //transformerInstanceHolder.get(KotlinOptimizationTransformer.class).transform(targetClassName, classNode, mixinClassName, mixinInfo); } } \ No newline at end of file diff --git a/src/main/java/space/eptaproject/vmodaddon/mixins/PhysicsTrackControllerMixin.java b/src/main/java/space/eptaproject/vmodaddon/mixins/PhysicsTrackControllerMixin.java index e567556..ca38712 100644 --- a/src/main/java/space/eptaproject/vmodaddon/mixins/PhysicsTrackControllerMixin.java +++ b/src/main/java/space/eptaproject/vmodaddon/mixins/PhysicsTrackControllerMixin.java @@ -6,6 +6,7 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Overwrite; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; +import space.eptaproject.vmodaddon.Config; import space.eptaproject.vmodaddon.IPhysicsTrackController; @Mixin(PhysicsTrackController.class) @@ -31,7 +32,7 @@ public abstract class PhysicsTrackControllerMixin implements IPhysicsTrackContro */ @Overwrite(remap = false) public final float setDamperCoefficient(float delta) { - this.suspensionStiffness = Math.clamp(1.0F, 50.0F, this.suspensionStiffness + delta); + this.suspensionStiffness = Math.clamp(0, Config.Suspension_Stiffness_LIMIT.get(), this.suspensionStiffness + delta); return this.suspensionStiffness; } } diff --git a/src/main/java/space/eptaproject/vmodaddon/util/ModRegistry.java b/src/main/java/space/eptaproject/vmodaddon/util/ModRegistry.java new file mode 100644 index 0000000..c27f880 --- /dev/null +++ b/src/main/java/space/eptaproject/vmodaddon/util/ModRegistry.java @@ -0,0 +1,77 @@ +package space.eptaproject.vmodaddon.util; + +import it.unimi.dsi.fastutil.objects.Object2ObjectArrayMap; +import lombok.Getter; +import net.minecraft.core.registries.Registries; +import net.minecraft.world.item.CreativeModeTab; +import net.minecraft.world.item.CreativeModeTabs; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.registries.DeferredRegister; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.RegistryObject; + +import java.util.Map; +import java.util.function.Consumer; + +public class ModRegistry { + @Getter + private final String modid; + + public final DeferredRegister BLOCKS; + public final DeferredRegister> BLOCK_ENTITIES; + public final Map, DeferredRegister> ITEMS; + public final DeferredRegister CREATIVE_MODE_TABS; + + + public ModRegistry(String modid) { + this.modid = modid; + this.BLOCKS = DeferredRegister.create(ForgeRegistries.BLOCKS, modid); + this.BLOCK_ENTITIES = DeferredRegister.create(ForgeRegistries.BLOCK_ENTITY_TYPES, modid); + this.ITEMS = new Object2ObjectArrayMap<>(); + this.CREATIVE_MODE_TABS = DeferredRegister.create(Registries.CREATIVE_MODE_TAB, modid); + } + + public TabBuilder TabBuilder() { + return new TabBuilder(this); + } + + public void register(IEventBus bus) { + this.BLOCKS.register(bus); + this.BLOCK_ENTITIES.register(bus); + this.CREATIVE_MODE_TABS.register(bus); + for (DeferredRegister registry : ITEMS.values()) { + registry.register(bus); + } + } + + + public static class TabBuilder { + private final ModRegistry registry; + public final DeferredRegister ITEMS; + + public TabBuilder(ModRegistry registry) { + this.registry = registry; + this.ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, registry.modid); + } + + public TabBuilder push(Consumer> registry) { + registry.accept(ITEMS); + return this; + } + + public RegistryObject build(String name, ItemStack icon) { + RegistryObject tab = this.registry.CREATIVE_MODE_TABS.register(name, () -> CreativeModeTab.builder().withTabsBefore(CreativeModeTabs.COMBAT).icon(() -> icon).displayItems((parameters, output) -> { + for (RegistryObject object : ITEMS.getEntries()) { + output.accept(object.get()); + } + }).build()); + + this.registry.ITEMS.put(tab, this.ITEMS); + return tab; + } + } +} diff --git a/src/main/resources/assets/vmodaddon/blockstates/track_b.json b/src/main/resources/assets/vmodaddon/blockstates/track_b.json new file mode 100644 index 0000000..459749f --- /dev/null +++ b/src/main/resources/assets/vmodaddon/blockstates/track_b.json @@ -0,0 +1,5 @@ +{ + "variants": { + "": { "model": "vmodaddon:block/track_b" } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/vmodaddon/lang/en_us.json b/src/main/resources/assets/vmodaddon/lang/en_us.json new file mode 100644 index 0000000..c9647d8 --- /dev/null +++ b/src/main/resources/assets/vmodaddon/lang/en_us.json @@ -0,0 +1,4 @@ +{ + "block.vmodaddon.track_b": "Track Backup", + "block.vmodaddon.ship_void": "Ship Void" +} \ No newline at end of file diff --git a/src/main/resources/assets/vmodaddon/models/block/track_b.json b/src/main/resources/assets/vmodaddon/models/block/track_b.json new file mode 100644 index 0000000..f1b4751 --- /dev/null +++ b/src/main/resources/assets/vmodaddon/models/block/track_b.json @@ -0,0 +1,53 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [64, 64], + "textures": { + "1": "vmodaddon:block/track_b", + "particle": "vmodaddon:block/track_b" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "north": {"uv": [4, 0, 8, 4], "texture": "#1"}, + "east": {"uv": [4, 0, 8, 4], "texture": "#1"}, + "south": {"uv": [4, 0, 8, 4], "texture": "#1"}, + "west": {"uv": [4, 0, 8, 4], "texture": "#1"}, + "up": {"uv": [8, 4, 4, 0], "texture": "#1"}, + "down": {"uv": [8, 0, 4, 4], "texture": "#1"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/vmodaddon/models/item/track_b.json b/src/main/resources/assets/vmodaddon/models/item/track_b.json new file mode 100644 index 0000000..f1b4751 --- /dev/null +++ b/src/main/resources/assets/vmodaddon/models/item/track_b.json @@ -0,0 +1,53 @@ +{ + "credit": "Made with Blockbench", + "texture_size": [64, 64], + "textures": { + "1": "vmodaddon:block/track_b", + "particle": "vmodaddon:block/track_b" + }, + "elements": [ + { + "from": [0, 0, 0], + "to": [16, 16, 16], + "faces": { + "north": {"uv": [4, 0, 8, 4], "texture": "#1"}, + "east": {"uv": [4, 0, 8, 4], "texture": "#1"}, + "south": {"uv": [4, 0, 8, 4], "texture": "#1"}, + "west": {"uv": [4, 0, 8, 4], "texture": "#1"}, + "up": {"uv": [8, 4, 4, 0], "texture": "#1"}, + "down": {"uv": [8, 0, 4, 4], "texture": "#1"} + } + } + ], + "display": { + "thirdperson_righthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "thirdperson_lefthand": { + "rotation": [75, 45, 0], + "translation": [0, 2.5, 0], + "scale": [0.375, 0.375, 0.375] + }, + "firstperson_righthand": { + "rotation": [0, 45, 0], + "scale": [0.4, 0.4, 0.4] + }, + "firstperson_lefthand": { + "rotation": [0, 225, 0], + "scale": [0.4, 0.4, 0.4] + }, + "ground": { + "translation": [0, 3, 0], + "scale": [0.25, 0.25, 0.25] + }, + "gui": { + "rotation": [30, 225, 0], + "scale": [0.625, 0.625, 0.625] + }, + "fixed": { + "scale": [0.5, 0.5, 0.5] + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/vmodaddon/textures/block/track_b.png b/src/main/resources/assets/vmodaddon/textures/block/track_b.png new file mode 100644 index 0000000..eccbeea Binary files /dev/null and b/src/main/resources/assets/vmodaddon/textures/block/track_b.png differ diff --git a/src/main/resources/data/vmodaddon/vs_mass/all.json b/src/main/resources/data/vmodaddon/vs_mass/all.json new file mode 100644 index 0000000..6ab9dfa --- /dev/null +++ b/src/main/resources/data/vmodaddon/vs_mass/all.json @@ -0,0 +1,12 @@ +[ + { + "block": "vmodaddon:ship_void", + "mass": 0.0, + "friction": 0.0 + }, + { + "block": "vmodaddon:track_b", + "mass": 40.0, + "friction": 0.0 + } +] \ No newline at end of file