Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
18 changes: 5 additions & 13 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ repositories {
name = "ModMaven"
url = "https://modmaven.dev"
}
maven { url = "https://api.modrinth.com/maven" } //for moonlight and everycompat
}

base {
Expand Down Expand Up @@ -129,20 +130,11 @@ dependencies {
// We add the full version to localRuntime, not runtimeOnly, so that we do not publish a dependency on it
localRuntime "mezz.jei:jei-${jei_minecraft_version}-neoforge:${jei_version}"

// Example mod dependency using a mod jar from ./libs with a flat dir repository
// This maps to ./libs/coolmod-${mc_version}-${coolmod_version}.jar
// The group id is ignored when searching -- in this case, it is "blank"
// implementation "blank:coolmod-${mc_version}:${coolmod_version}"
implementation "maven.modrinth:twkfQtEc:${moonlight_version}" //moonlight
implementation "maven.modrinth:eiktJyw1:${everycomp_version}" //everycompat

// Example mod dependency using a file as dependency
// implementation files("libs/coolmod-${mc_version}-${coolmod_version}.jar")

// Example project dependency using a sister or child project:
// implementation project(":myproject")

// For more info:
// http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html
// http://www.gradle.org/docs/current/userguide/dependency_management.html
runtimeOnly "maven.modrinth:VsM5EDoI:${blueprint_version}" //blueprint for atmopsheric
runtimeOnly "maven.modrinth:U9sJOFmJ:${atmospheric_version}" //atmospheric for wood testing
}

// This block of code expands all declared replace properties in the specified resource targets.
Expand Down
8 changes: 7 additions & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,20 @@ parchment_mappings_version=2024.11.17
# The Minecraft version must agree with the Neo version to get a valid artifact
minecraft_version=1.21.1
minecraft_version_range=[1.21.1]
neo_version=21.1.219
neo_version=21.1.250
neo_version_range=[21.1.92,)
loader_version_range=[1,)

# Dependency Properties
jei_version=19.8.2.99
jei_minecraft_version=1.21

moonlight_version=BnjVBHVl
everycomp_version=vcMMscKB

blueprint_version=FHOjk8Ez
atmospheric_version=XIvPRE4O

## Mod Properties
mod_id=blockbox
mod_name=The Block Box
Expand Down
12 changes: 11 additions & 1 deletion src/main/java/vectorwing/blockbox/BlockBox.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@
package vectorwing.blockbox;

import com.mojang.logging.LogUtils;
import net.minecraft.resources.ResourceLocation;
import net.mehvahdjukaar.every_compat.EveryCompat;
import net.mehvahdjukaar.every_compat.api.EveryCompatAPI;
import net.neoforged.bus.api.IEventBus;
import net.neoforged.fml.ModContainer;
import net.neoforged.fml.ModList;
import net.neoforged.fml.common.Mod;
import net.neoforged.fml.config.ModConfig;
import net.neoforged.fml.loading.LoadingModList;
import org.slf4j.Logger;
import vectorwing.blockbox.common.registry.*;
import vectorwing.blockbox.compat.BlockBoxEveryCompatModule;

@Mod(BlockBox.MODID)
public class BlockBox
Expand All @@ -24,5 +28,11 @@ public BlockBox(IEventBus modEventBus, ModContainer modContainer) {
ModSounds.SOUNDS.register(modEventBus);
ModParticleTypes.PARTICLE_TYPES.register(modEventBus);
ModCreativeTabs.CREATIVE_MODE_TABS.register(modEventBus);

if(ModList.get().isLoaded("everycomp")){ //there is probably a better way to check?
BlockBox.LOGGER.info("EveryCompat detected. Starting compat module");
EveryCompatAPI.registerModule(new BlockBoxEveryCompatModule(BlockBox.MODID));
//EveryCompat.addOptionalModule(BlockBox.MODID, () -> BlockBoxEveryCompatModule.class); //everycompat internal version?
}
}
}
12 changes: 6 additions & 6 deletions src/main/java/vectorwing/blockbox/common/registry/ModBlocks.java
Original file line number Diff line number Diff line change
Expand Up @@ -218,27 +218,27 @@ private static Block slab(BlockBehaviour.Properties properties) {
return new SlabBlock(properties);
}

private static Block palisade(Supplier<Block> spikedForm, @Nullable Supplier<Block> strippedForm, MapColor mapColor) {
public static Block palisade(Supplier<Block> spikedForm, @Nullable Supplier<Block> strippedForm, MapColor mapColor) {
return palisade(spikedForm, strippedForm, mapColor, SoundType.WOOD);
}

private static Block palisade(Supplier<Block> spikedForm, @Nullable Supplier<Block> strippedForm, MapColor mapColor, SoundType soundType) {
public static Block palisade(Supplier<Block> spikedForm, @Nullable Supplier<Block> strippedForm, MapColor mapColor, SoundType soundType) {
return new PalisadeBlock(spikedForm, strippedForm, PROPERTIES_PALISADE.mapColor(mapColor).sound(soundType).ignitedByLava());
}

private static Block netherPalisade(Supplier<Block> spikedForm, @Nullable Supplier<Block> strippedForm, MapColor mapColor) {
public static Block netherPalisade(Supplier<Block> spikedForm, @Nullable Supplier<Block> strippedForm, MapColor mapColor) {
return new PalisadeBlock(spikedForm, strippedForm, PROPERTIES_PALISADE.mapColor(mapColor).sound(SoundType.STEM));
}

private static Block spikedPalisade(@Nullable Supplier<Block> strippedForm, MapColor mapColor) {
public static Block spikedPalisade(@Nullable Supplier<Block> strippedForm, MapColor mapColor) {
return spikedPalisade(strippedForm, mapColor, SoundType.WOOD);
}

private static Block spikedPalisade(@Nullable Supplier<Block> strippedForm, MapColor mapColor, SoundType soundType) {
public static Block spikedPalisade(@Nullable Supplier<Block> strippedForm, MapColor mapColor, SoundType soundType) {
return new SpikedPalisadeBlock(strippedForm, PROPERTIES_PALISADE.mapColor(mapColor).sound(soundType).ignitedByLava());
}

private static Block netherSpikedPalisade(@Nullable Supplier<Block> strippedForm, MapColor mapColor) {
public static Block netherSpikedPalisade(@Nullable Supplier<Block> strippedForm, MapColor mapColor) {
return new SpikedPalisadeBlock(strippedForm, PROPERTIES_PALISADE.mapColor(mapColor).sound(SoundType.STEM));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
package vectorwing.blockbox.compat;

import net.mehvahdjukaar.every_compat.api.SimpleEntrySet;
import net.mehvahdjukaar.every_compat.modules.EveryCompatModule;
import net.mehvahdjukaar.moonlight.api.set.wood.VanillaWoodTypes;
import net.mehvahdjukaar.moonlight.api.set.wood.WoodType;
import net.minecraft.core.registries.Registries;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.BlockTags;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.BlockBehaviour;
import vectorwing.blockbox.common.block.SeatBlock;
import vectorwing.blockbox.common.registry.ModBlocks;
import vectorwing.blockbox.common.registry.ModCreativeTabs;

import java.util.function.Supplier;

import static net.mehvahdjukaar.moonlight.api.set.wood.VanillaWoodChildKeys.*;

public class BlockBoxEveryCompatModule extends EveryCompatModule {

public final SimpleEntrySet<WoodType, Block> seat;

public final SimpleEntrySet<WoodType, Block> palisade;
public final SimpleEntrySet<WoodType, Block> spikedPalisade;
public final SimpleEntrySet<WoodType, Block> strippedPalisade;
public final SimpleEntrySet<WoodType, Block> strippedSpikedPalisade;

//texture constants since they are used more than once
public static final String BLOCK_OAK_PALISADE_CORE = "block/oak_palisade_core";
public static final String BLOCK_OAK_PALISADE_SIDE = "block/oak_palisade_side";
public static final String BLOCK_OAK_PALISADE_TOP = "block/oak_palisade_top";
public static final String BLOCK_STRIPPED_OAK_PALISADE_CORE = "block/stripped_oak_palisade_core";
public static final String BLOCK_STRIPPED_OAK_PALISADE_SIDE = "block/stripped_oak_palisade_side";
public static final String BLOCK_STRIPPED_OAK_PALISADE_TOP = "block/stripped_oak_palisade_top";


public BlockBoxEveryCompatModule(String modId) {
super(modId, "bb");
//"bb" is not currently used by anything else to my knowledge,
//but I think it will cause issues if another mod tries to use the same string for its module?
//but it's not like there's a database of everycompat module short IDs
ResourceLocation creativeTabRL = ModCreativeTabs.TAB_BLOCK_BOX.getId();

this.seat = SimpleEntrySet.builder(WoodType.class, "seat",
getModBlock("oak_seat"), () -> VanillaWoodTypes.OAK,
w -> new SeatBlock(BlockBehaviour.Properties.ofFullCopy(w.planks)))
.requiresChildren(PLANKS) //REASON: recipes
.addTag(BlockTags.MINEABLE_WITH_AXE, Registries.BLOCK)
.addTag(modRes("wooden_seats"), Registries.BLOCK, Registries.ITEM)
.setTab(getTab(creativeTabRL))
.addRecipe(modRes("oak_seat"))
.copyParentDrop()
.addTexture(modRes("block/oak_seat_side"))
.addTexture(modRes("block/oak_seat_top"))
.build();
this.addEntry(seat);

this.palisade = SimpleEntrySet.builder(WoodType.class, "palisade",
getModBlock("oak_palisade"), () -> VanillaWoodTypes.OAK,
w -> w.canBurn() ? //only affects sounds? no palisade can burn
ModBlocks.netherPalisade(getPalisadeForm(w, PalisadeForm.SPIKED), getPalisadeForm(w, PalisadeForm.STRIPPED), w.getColor()) :
ModBlocks.palisade(getPalisadeForm(w, PalisadeForm.SPIKED), getPalisadeForm(w, PalisadeForm.STRIPPED), w.getColor())
)
.requiresChildren(LOG) //REASON: recipes
.addTag(BlockTags.MINEABLE_WITH_AXE, Registries.BLOCK)
.addTag(modRes("palisades"), Registries.BLOCK, Registries.ITEM)
.setTab(getTab(creativeTabRL))
.copyParentDrop()
.addRecipe(modRes("oak_palisade"))
.addTexture(modRes(BLOCK_OAK_PALISADE_CORE))
.addTexture(modRes(BLOCK_OAK_PALISADE_SIDE))
.addTexture(modRes(BLOCK_OAK_PALISADE_TOP)) //<-- spike texture in here
.build();
this.addEntry(palisade);
this.spikedPalisade = SimpleEntrySet.builder(WoodType.class, "palisade", "spiked",
getModBlock("spiked_oak_palisade"), () -> VanillaWoodTypes.OAK,
w -> ModBlocks.spikedPalisade(getPalisadeForm(w, PalisadeForm.STRIPPED_SPIKED), w.getColor()))
.requiresChildren(LOG)
.addTag(BlockTags.MINEABLE_WITH_AXE, Registries.BLOCK)
.addTag(modRes("spiked_palisades"), Registries.BLOCK, Registries.ITEM)
.setTab(getTab(creativeTabRL))
.copyParentDrop()
.addRecipe(modRes("spiked_oak_palisade"))
.addTexture(modRes(BLOCK_OAK_PALISADE_CORE))
.addTexture(modRes(BLOCK_OAK_PALISADE_SIDE))
.addTexture(modRes(BLOCK_OAK_PALISADE_TOP))
.build();
this.addEntry(spikedPalisade);

this.strippedPalisade = SimpleEntrySet.builder(WoodType.class, "palisade", "stripped",
getModBlock("stripped_oak_palisade"), () -> VanillaWoodTypes.OAK,
w -> ModBlocks.palisade(getPalisadeForm(w, PalisadeForm.STRIPPED_SPIKED), null, w.getColor()))
.requiresChildren(LOG)
.addTag(BlockTags.MINEABLE_WITH_AXE, Registries.BLOCK)
.addTag(modRes("palisades"), Registries.BLOCK, Registries.ITEM)
.setTab(getTab(creativeTabRL))
.copyParentDrop()
.addRecipe(modRes("stripped_oak_palisade"))
.addTexture(modRes(BLOCK_STRIPPED_OAK_PALISADE_CORE))
.addTexture(modRes(BLOCK_STRIPPED_OAK_PALISADE_SIDE))
.addTexture(modRes(BLOCK_STRIPPED_OAK_PALISADE_TOP))
.build();
this.addEntry(strippedPalisade);
this.strippedSpikedPalisade = SimpleEntrySet.builder(WoodType.class, "palisade", "stripped_spiked",
getModBlock("stripped_spiked_oak_palisade"), () -> VanillaWoodTypes.OAK,
w -> ModBlocks.spikedPalisade(getPalisadeForm(w, PalisadeForm.STRIPPED_SPIKED), w.getColor()))
.requiresChildren(LOG)
.addTag(BlockTags.MINEABLE_WITH_AXE, Registries.BLOCK)
.addTag(modRes("spiked_palisades"), Registries.BLOCK, Registries.ITEM)
.setTab(getTab(creativeTabRL))
.copyParentDrop()
.addRecipe(modRes("stripped_spiked_oak_palisade"))
.addTexture(modRes(BLOCK_STRIPPED_OAK_PALISADE_CORE))
.addTexture(modRes(BLOCK_STRIPPED_OAK_PALISADE_SIDE))
.addTexture(modRes(BLOCK_STRIPPED_OAK_PALISADE_TOP))
.build();
this.addEntry(strippedSpikedPalisade);

}

public Supplier<Block> getPalisadeForm(WoodType woodType, PalisadeForm palisadeForm){
return () -> switch (palisadeForm){
case NORMAL -> palisade.blocks.get(woodType);
case SPIKED -> spikedPalisade.blocks.get(woodType);
case STRIPPED -> strippedPalisade.blocks.get(woodType);
case STRIPPED_SPIKED -> strippedSpikedPalisade.blocks.get(woodType);
};
}

public enum PalisadeForm {
NORMAL,
SPIKED,
STRIPPED,
STRIPPED_SPIKED
}

}
8 changes: 7 additions & 1 deletion src/main/resources/assets/blockbox/lang/en_us.json
Original file line number Diff line number Diff line change
Expand Up @@ -172,5 +172,11 @@

"blockbox.subtitles.sword.carve": "Sword carves",

"death.attack.blockbox.palisade": "%1$s was skewered by a spiked palisade"
"death.attack.blockbox.palisade": "%1$s was skewered by a spiked palisade",

"block_type.blockbox.seat": "%s Seat",
"block_type.blockbox.palisade": "%s Palisade",
"block_type.blockbox.spiked_palisade": "Spiked %s Palisade",
"block_type.blockbox.stripped_palisade": "Stripped %s Palisade",
"block_type.blockbox.stripped_spiked_palisade": "Stripped Spiked Palisade"
}