Compare commits

...

11 Commits

Author SHA1 Message Date
Justi 4018e31455 Update 'README.md'
notification that this mod will die
2021-10-29 00:54:33 -04:00
Justi b266c561f1 Initial Release code 2021-10-27 23:31:08 -04:00
Justi b44c9abf8e first attempt to overwrite loottables 2021-10-25 00:31:25 -04:00
Justi 273de51797 addition of standard recipes 2021-10-24 22:51:17 -04:00
Justi 5a3510873b disallow disable brewing reccipe, added firestar 2021-10-24 22:37:06 -04:00
Justi 8aa8895c52 minor refactoring 2021-10-24 21:21:27 -04:00
Justi 9fc1ea35e8 reccipe fix 2021-10-24 20:42:06 -04:00
Justi f6af1add93 Addition of dynamic recipe additions 2021-10-24 20:23:33 -04:00
Justi 5d10610a1d addition of cloth config, removal of fiber 2021-10-24 19:14:06 -04:00
Justi 0ab7da3ff0 beginning of fiber config 2021-10-24 17:53:06 -04:00
Justi 047a7f3e72 addition of textures and lang 2021-10-23 23:21:02 -04:00
21 changed files with 417 additions and 34 deletions
+6 -2
View File
@@ -1,8 +1,12 @@
# Glowstone Wire
Adds redstone-like dust for glowstone.
- Emit's light level 9 (Perfect for 2-wide path ways)
- Is thinner then redstone
- Emit's light level 8 (Perfect for 2-wide path ways)
- Can be customized to look a little more stylized
10/10, great mod.
===================
This mod will not see any further updates,
And I urge you to look at Wired Dust by myself.
+6
View File
@@ -16,6 +16,7 @@ repositories {
// Loom adds the essential maven repositories to download Minecraft and libraries from automatically.
// See https://docs.gradle.org/current/userguide/declaring_repositories.html
// for more information about repositories.
maven{url "https://maven.shedaniel.me/"}
}
dependencies {
@@ -27,6 +28,11 @@ dependencies {
// Fabric API. This is technically optional, but you probably want it anyway.
modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"
// Custom API's
modApi ("me.shedaniel.cloth:cloth-config-fabric:4.11.26") {
exclude(group: "net.fabricmc.fabric-api")
}
// PSA: Some older mods, compiled on Loom 0.2.1, might have outdated Maven POMs.
// You may need to force-disable transitiveness on them.
}
+2 -2
View File
@@ -8,9 +8,9 @@ org.gradle.jvmargs=-Xmx1G
loader_version=0.11.3
# Mod Properties
mod_version = 0.0.1
mod_version = 1.0.0
maven_group = me.parsell
archives_base_name = glowstonedust
archives_base_name = glowstonewire
# Dependencies
# currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api
@@ -2,18 +2,24 @@ package me.parsell.glowstonewire;
import me.parsell.glowstonewire.core.glowBlocks;
import me.parsell.glowstonewire.core.glowItems;
import me.parsell.glowstonewire.core.glowLootTables;
import me.parsell.glowstonewire.core.glowRecipes;
import me.shedaniel.autoconfig.AutoConfig;
import me.shedaniel.autoconfig.serializer.GsonConfigSerializer;
import net.fabricmc.api.ModInitializer;
import net.fabricmc.fabric.api.client.itemgroup.FabricItemGroupBuilder;
import net.minecraft.item.ItemGroup;
import net.minecraft.util.Identifier;
public class GlowstoneWire implements ModInitializer {
public static final String MODID = "GlowstoneWire";
public static final ItemGroup GLOWSTONEWIRE_MOD = FabricItemGroupBuilder.create(new Identifier(MODID, "general")).build();
public static final String MODID = "glowstonewire";
public static GlowstoneWireConfig CONFIG;
@Override
public void onInitialize() {
AutoConfig.register(GlowstoneWireConfig.class, GsonConfigSerializer::new);
CONFIG = AutoConfig.getConfigHolder(GlowstoneWireConfig.class).getConfig();
glowBlocks.init();
glowItems.init();
glowRecipes.init();
glowLootTables.init();
}
}
@@ -0,0 +1,11 @@
package me.parsell.glowstonewire;
import me.shedaniel.autoconfig.ConfigData;
import me.shedaniel.autoconfig.annotation.Config;
@Config(name = "GlowstoneWire")
public class GlowstoneWireConfig implements ConfigData{
public String Description = "Changing this does nothing. Replacing glowstone drops is dirty, and will overwrite ALL loot tables that attempt to change minecraft's glowstone loot table. Disable this, and cocnsider using a datapack to achieve what you want.";
public boolean addConversionRecipes = true;
public boolean replaceGlowstoneDrop = true;
}
@@ -70,9 +70,9 @@ public class GlowstoneWireBlock extends Block{
private static boolean hasConnection(BlockState state) {
return ((GlowWireConnection)state.get(WIRE_CONNECTION_NORTH)).isConnected() ||
((GlowWireConnection)state.get(WIRE_CONNECTION_SOUTH)).isConnected() ||
((GlowWireConnection)state.get(WIRE_CONNECTION_EAST)).isConnected() ||
((GlowWireConnection)state.get(WIRE_CONNECTION_WEST)).isConnected();
((GlowWireConnection)state.get(WIRE_CONNECTION_SOUTH)).isConnected() ||
((GlowWireConnection)state.get(WIRE_CONNECTION_EAST)).isConnected() ||
((GlowWireConnection)state.get(WIRE_CONNECTION_WEST)).isConnected();
}
private BlockState determineState(WorldAccess world, BlockState state, BlockPos pos){
@@ -85,17 +85,18 @@ public class GlowstoneWireBlock extends Block{
}
private GlowWireConnection determineConnection(WorldAccess world, BlockPos pos, Direction direction){
if((world.getBlockState(pos.offset(direction).up()).isOf(this) && world.isAir(pos.up()))) // If offset+up is me && if up is air
if(!world.getBlockState(pos.offset(direction).up()).get(DIRECTION_TO_WIRE_CONNECTION.get(direction.getOpposite())).isBroken()) //if offset+up is not broken
if(world.getBlockState(pos.offset(direction)).hasSidedTransparency())
BlockPos offsetPos = pos.offset(direction);
if((world.getBlockState(offsetPos.up()).isOf(this) && world.isAir(pos.up()))) // If offset+up is me && if up is air
if(!world.getBlockState(offsetPos.up()).get(DIRECTION_TO_WIRE_CONNECTION.get(direction.getOpposite())).isBroken()) //if offset+up is not broken
if(world.getBlockState(offsetPos).hasSidedTransparency())
return GlowWireConnection.SIDE;
else
return GlowWireConnection.UP;
if(world.getBlockState(pos.offset(direction).down()).isOf(this) && world.isAir(pos.offset(direction))) // if offset+down is me && if offset is air
if(!world.getBlockState(pos.offset(direction).down()).get(DIRECTION_TO_WIRE_CONNECTION.get(direction.getOpposite())).isBroken()) //if offset+down is not broken
if(world.getBlockState(offsetPos.down()).isOf(this) && world.isAir(offsetPos)) // if offset+down is me && if offset is air
if(!world.getBlockState(offsetPos.down()).get(DIRECTION_TO_WIRE_CONNECTION.get(direction.getOpposite())).isBroken()) //if offset+down is not broken
return GlowWireConnection.SIDE;
if(world.getBlockState(pos.offset(direction)).isOf(this)) // if offset is me
if(!world.getBlockState(pos.offset(direction)).get(DIRECTION_TO_WIRE_CONNECTION.get(direction.getOpposite())).isBroken()) // if offset is not broken
if(world.getBlockState(offsetPos).isOf(this)) // if offset is me
if(!world.getBlockState(offsetPos).get(DIRECTION_TO_WIRE_CONNECTION.get(direction.getOpposite())).isBroken()) // if offset is not broken
return GlowWireConnection.SIDE;
return GlowWireConnection.NONE;
}
@@ -108,9 +109,9 @@ public class GlowstoneWireBlock extends Block{
public VoxelShape determineVoxelShape(BlockState state){
VoxelShape voxelShape = DOT_VOXELSHAPE;
Iterator dirItr1 = Direction.Type.HORIZONTAL.iterator();
while(dirItr1.hasNext()) {
Direction direction = (Direction)dirItr1.next();
Iterator dirItr = Direction.Type.HORIZONTAL.iterator();
while(dirItr.hasNext()) {
Direction direction = (Direction)dirItr.next();
GlowWireConnection wireConnection = state.get(DIRECTION_TO_WIRE_CONNECTION.get(direction));
if(state.equals(this.getDefaultState().with(DIRECTION_TO_WIRE_CONNECTION.get(direction), GlowWireConnection.SIDE))) {
voxelShape = VoxelShapes.union(voxelShape, (VoxelShape)DIRECTION_HITBOX.get(direction));
@@ -1,17 +1,23 @@
package me.parsell.glowstonewire.core;
import me.parsell.glowstonewire.GlowstoneWire;
import me.parsell.glowstonewire.mixin.BrewingRecipeRegistryInvoker;
import net.fabricmc.fabric.api.client.itemgroup.FabricItemGroupBuilder;
import net.fabricmc.fabric.api.item.v1.FabricItemSettings;
import net.minecraft.item.BlockItem;
import net.minecraft.item.Item;
import net.minecraft.item.ItemGroup;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.potion.Potions;
import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry;
public class glowItems {
public static final Item Glowstone = new BlockItem(glowBlocks.GLOWSTONEWIRE, new FabricItemSettings().group(GlowstoneWire.GLOWSTONEWIRE_MOD));
public static final ItemGroup GLOWSTONEWIRE_CTAB = FabricItemGroupBuilder.build(new Identifier(GlowstoneWire.MODID, "general"), () -> new ItemStack(Items.GLOWSTONE_DUST));
public static final Item GLOWSTONE_DUST = new BlockItem(glowBlocks.GLOWSTONEWIRE, new FabricItemSettings().group(GLOWSTONEWIRE_CTAB));
public static void init(){
Registry.register(Registry.ITEM, new Identifier(GlowstoneWire.MODID, "glowstone"), Glowstone);
};
Registry.register(Registry.ITEM, new Identifier(GlowstoneWire.MODID, "glowstone_dust"), GLOWSTONE_DUST);
}
}
@@ -0,0 +1,125 @@
package me.parsell.glowstonewire.core;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import me.parsell.glowstonewire.GlowstoneWire;
public class glowLootTables {
public static JsonObject glowstonelootTable;
public static void init(){
if(GlowstoneWire.CONFIG.replaceGlowstoneDrop) {
JsonObject explosion;
JsonObject limitValues, limit;
JsonObject bonus, parametersValues;
JsonObject count, countValues;
JsonArray secondItemArray;
JsonObject secondItem;
JsonObject levelsValues, silktouch;
JsonArray enchantmentsArray;
JsonObject enchantments, match;
JsonArray firstItemArray;
JsonObject firstItem;
JsonArray alternativesArray;
JsonObject alternatives;
JsonArray rollsArray;
JsonObject rolls;
JsonArray lootPoolsArray;
explosion = new JsonObject();
explosion.addProperty("function", "minecraft:explosion_decay");
limit = new JsonObject();
limit.addProperty("function", "minecraft:limit_count");
limitValues = new JsonObject();
limitValues.addProperty("max", 4);
limitValues.addProperty("min", 1);
limit.add("limit", limitValues);
bonus = new JsonObject();
bonus.addProperty("function", "minecraft:apply_bonus");
bonus.addProperty("enchantment", "minecraft:fortune");
bonus.addProperty("formula", "minecraft:uniform_bonus_count");
parametersValues = new JsonObject();
parametersValues.addProperty("bonusMultiplier", 1);
bonus.add("parameters", parametersValues);
count = new JsonObject();
count.addProperty("function", "minecraft:set_count");
countValues = new JsonObject();
countValues.addProperty("min", 2.0);
countValues.addProperty("max", 4.0);
countValues.addProperty("type", "minecraft:uniform");
count.add("count", countValues);
secondItemArray = new JsonArray();
secondItemArray.add(count);
secondItemArray.add(bonus);
secondItemArray.add(limit);
secondItemArray.add(explosion);
secondItem = new JsonObject();
secondItem.addProperty("type", "minecraft:item");
secondItem.add("functions", secondItemArray);
secondItem.addProperty("name", "glowstonewire:glowstone_dust");
//
levelsValues = new JsonObject();
levelsValues.addProperty("min", 1);
silktouch = new JsonObject();
silktouch.addProperty("enchantment", "minecraft:silk_touch");
silktouch.add("levels", levelsValues);
enchantmentsArray = new JsonArray();
enchantmentsArray.add(silktouch);
enchantments = new JsonObject();
enchantments.add("enchantments", enchantmentsArray);
match = new JsonObject();
match.addProperty("condition", "minecraft:match_tool");
match.add("predicate", enchantments);
firstItemArray = new JsonArray();
firstItemArray.add(match);
firstItem = new JsonObject();
firstItem.addProperty("type", "minecraft:item");
firstItem.add("conditions", firstItemArray);
firstItem.addProperty("name", "minecraft:glowstone");
//
alternativesArray = new JsonArray();
alternativesArray.add(firstItem);
alternativesArray.add(secondItem);
alternatives = new JsonObject();
alternatives.addProperty("type", "minecraft:alternatives");
alternatives.add("children", alternativesArray);
//
rollsArray = new JsonArray();
rollsArray.add(alternatives);
rolls = new JsonObject();
rolls.addProperty("rolls", 1);
rolls.add("entries", rollsArray);
//
lootPoolsArray = new JsonArray();
lootPoolsArray.add(rolls);
glowstonelootTable = new JsonObject();
glowstonelootTable.addProperty("type", "minecraft:block");
glowstonelootTable.add("pools", lootPoolsArray);
}
}
}
@@ -0,0 +1,66 @@
package me.parsell.glowstonewire.core;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import me.parsell.glowstonewire.GlowstoneWire;
import me.parsell.glowstonewire.mixin.BrewingRecipeRegistryInvoker;
import me.parsell.glowstonewire.mixin.FireworkStarRecipeAccessor;
import net.minecraft.item.Items;
import net.minecraft.potion.Potions;
import net.minecraft.recipe.Ingredient;
public class glowRecipes {
public static JsonObject MODDED_TO_VANILLA;
public static JsonObject VANILLA_TO_MODDED;
public static void init(){
BrewingRecipeRegistryInvoker.registerPotionRecipe(Potions.WATER, glowItems.GLOWSTONE_DUST, Potions.THICK);
BrewingRecipeRegistryInvoker.registerPotionRecipe(Potions.LEAPING, glowItems.GLOWSTONE_DUST, Potions.STRONG_LEAPING);
BrewingRecipeRegistryInvoker.registerPotionRecipe(Potions.SLOWNESS, glowItems.GLOWSTONE_DUST, Potions.STRONG_SLOWNESS);
BrewingRecipeRegistryInvoker.registerPotionRecipe(Potions.TURTLE_MASTER, glowItems.GLOWSTONE_DUST, Potions.STRONG_TURTLE_MASTER);
BrewingRecipeRegistryInvoker.registerPotionRecipe(Potions.SWIFTNESS, glowItems.GLOWSTONE_DUST, Potions.STRONG_SWIFTNESS);
BrewingRecipeRegistryInvoker.registerPotionRecipe(Potions.HEALING, glowItems.GLOWSTONE_DUST, Potions.STRONG_HEALING);
BrewingRecipeRegistryInvoker.registerPotionRecipe(Potions.HARMING, glowItems.GLOWSTONE_DUST, Potions.STRONG_HARMING);
BrewingRecipeRegistryInvoker.registerPotionRecipe(Potions.POISON, glowItems.GLOWSTONE_DUST, Potions.STRONG_POISON);
BrewingRecipeRegistryInvoker.registerPotionRecipe(Potions.REGENERATION, glowItems.GLOWSTONE_DUST, Potions.STRONG_REGENERATION);
BrewingRecipeRegistryInvoker.registerPotionRecipe(Potions.STRENGTH, glowItems.GLOWSTONE_DUST, Potions.STRONG_STRENGTH);
// Manually reset the glowstone compability, since i cant find a way to read and reset.
Ingredient defaultFSFlickerModifier = FireworkStarRecipeAccessor.getFlickerModifier();
FireworkStarRecipeAccessor.setFlickerModifier(Ingredient.ofItems(Items.GLOWSTONE_DUST, glowItems.GLOWSTONE_DUST));
if(GlowstoneWire.CONFIG.addConversionRecipes) {
// Base JsonObjects
JsonObject cIngredientVanilla = new JsonObject();
JsonObject CIngredientModded = new JsonObject();
JsonArray cIngredientsList = new JsonArray();
cIngredientVanilla.addProperty("item", "minecraft:glowstone_dust");
CIngredientModded.addProperty("item", "glowstonewire:glowstone_dust");
// FOR VANILLA TO MODDED
VANILLA_TO_MODDED = new JsonObject();
// Header, defining what type of crafting recipe it is
VANILLA_TO_MODDED.addProperty("type", "minecraft:crafting_shapeless");
// Adding the ingredients
cIngredientsList.add(cIngredientVanilla);
VANILLA_TO_MODDED.add("ingredients", cIngredientsList);
// Adding the result
VANILLA_TO_MODDED.add("result", CIngredientModded);
// Clearing out the old array for new
cIngredientsList = new JsonArray();
// FOR MODDED TO VANILLA
MODDED_TO_VANILLA = new JsonObject();
// Define recipe type
MODDED_TO_VANILLA.addProperty("type", "minecraft:crafting_shapeless");
// Add ingredients
cIngredientsList.add(CIngredientModded);
MODDED_TO_VANILLA.add("ingredients", cIngredientsList);
// Add result
MODDED_TO_VANILLA.add("result", cIngredientVanilla);
}
}
}
@@ -0,0 +1,16 @@
package me.parsell.glowstonewire.mixin;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Invoker;
import net.minecraft.item.Item;
import net.minecraft.potion.Potion;
import net.minecraft.recipe.BrewingRecipeRegistry;
@Mixin(BrewingRecipeRegistry.class)
public interface BrewingRecipeRegistryInvoker {
@Invoker("registerPotionRecipe")
public static void registerPotionRecipe(Potion input, Item item, Potion output) {
throw new AssertionError();
}
}
@@ -0,0 +1,20 @@
package me.parsell.glowstonewire.mixin;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
import net.minecraft.recipe.FireworkStarRecipe;
import net.minecraft.recipe.Ingredient;
@Mixin(FireworkStarRecipe.class)
public interface FireworkStarRecipeAccessor {
@Accessor("FLICKER_MODIFIER")
public static Ingredient getFlickerModifier(){
throw new AssertionError();
}
@Accessor("FLICKER_MODIFIER")
public static void setFlickerModifier(Ingredient FLICKER_MODIFIER){
throw new AssertionError();
}
}
@@ -0,0 +1,27 @@
package me.parsell.glowstonewire.mixin;
import java.util.Map;
import com.google.gson.JsonElement;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import me.parsell.glowstonewire.GlowstoneWire;
import me.parsell.glowstonewire.core.glowLootTables;
import net.minecraft.loot.LootManager;
import net.minecraft.resource.ResourceManager;
import net.minecraft.util.Identifier;
import net.minecraft.util.profiler.Profiler;
@Mixin(LootManager.class)
public class LootManagerInjector {
@Inject(method = "apply", at = @At("HEAD"))
public void interceptApply(Map<Identifier, JsonElement> map, ResourceManager resourceManager, Profiler profiler, CallbackInfo info) {
if (GlowstoneWire.CONFIG.replaceGlowstoneDrop) {
map.put(new Identifier("minecraft", "blocks/glowstone"), glowLootTables.glowstonelootTable);
}
}
}
@@ -0,0 +1,28 @@
package me.parsell.glowstonewire.mixin;
import java.util.Map;
import com.google.gson.JsonElement;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import me.parsell.glowstonewire.GlowstoneWire;
import me.parsell.glowstonewire.core.glowRecipes;
import net.minecraft.recipe.RecipeManager;
import net.minecraft.resource.ResourceManager;
import net.minecraft.util.Identifier;
import net.minecraft.util.profiler.Profiler;
@Mixin(RecipeManager.class)
public class RecipeManagerInjector {
@Inject(method = "apply", at = @At("HEAD"))
public void interceptApply(Map<Identifier, JsonElement> map, ResourceManager resourceManager, Profiler profiler, CallbackInfo info) {
if (GlowstoneWire.CONFIG.addConversionRecipes) {
map.put(new Identifier(GlowstoneWire.MODID, "glowstone_vanilla_modded"), glowRecipes.VANILLA_TO_MODDED);
map.put(new Identifier(GlowstoneWire.MODID, "glowstone_modded_vanilla"), glowRecipes.MODDED_TO_VANILLA);
}
}
}
@@ -0,0 +1,4 @@
{
"itemGroup.glowstonewire.general": "Glowstone Wire",
"block.glowstonewire.glowstone_wire": "Glowstone Dust"
}
@@ -0,0 +1,6 @@
{
"parent": "item/generated",
"textures": {
"layer0": "glowstonewire:item/glowstone_dust"
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 191 B

@@ -0,0 +1,19 @@
{
"type": "minecraft:block",
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "minecraft:item",
"name": "glowstonewire:glowstone_dust"
}
],
"conditions": [
{
"condition": "minecraft:survives_explosion"
}
]
}
]
}
@@ -0,0 +1,15 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
"##",
"##"
],
"key": {
"#": {
"item": "glowstonewire:glowstone_dust"
}
},
"result": {
"item": "minecraft:glowstone"
}
}
@@ -0,0 +1,20 @@
{
"type": "minecraft:crafting_shaped",
"pattern": [
" # ",
"#X#",
" # "
],
"key": {
"#": {
"item": "glowstonewire:glowstone_dust"
},
"X": {
"item": "minecraft:arrow"
}
},
"result": {
"item": "minecraft:spectral_arrow",
"count": 2
}
}
+5 -5
View File
@@ -1,7 +1,7 @@
{
"schemaVersion": 1,
"id": "glowstonewire",
"version": "${version}",
"version": "1.0.0",
"name": "Glowstone Wire",
"description": "Adds redstone like dust in the form of glowstone, used to emit a lower light level in a small form factor",
@@ -9,8 +9,8 @@
"Ganku (Badjman)"
],
"contact": {
"homepage": "https://fabricmc.net/",
"sources": "https://github.com/FabricMC/fabric-example-mod"
"homepage": "",
"sources": "https://git.parsell.me/Justi/GlowstoneWire/"
},
"license": "MIT",
@@ -32,9 +32,9 @@
"depends": {
"fabricloader": ">=0.7.4",
"fabric": "*",
"minecraft": "1.16.x"
"minecraft": "1.16.x",
"cloth-config2": ">=4.11.26"
},
"suggests": {
"another-mod": "*"
}
}
+5 -2
View File
@@ -1,12 +1,15 @@
{
"required": true,
"minVersion": "0.8",
"package": "me.parsell.glowstonedust.mixin",
"package": "me.parsell.glowstonewire.mixin",
"compatibilityLevel": "JAVA_8",
"mixins": [
],
"client": [
"BrewingRecipeRegistryInvoker",
"RecipeManagerInjector",
"LootManagerInjector",
"FireworkStarRecipeAccessor"
],
"injectors": {
"defaultRequire": 1