diff --git a/src/data/java/galena/oreganized/data/OBlockStates.java b/src/data/java/galena/oreganized/data/OBlockStates.java index 6121d924..fcb6cc0c 100644 --- a/src/data/java/galena/oreganized/data/OBlockStates.java +++ b/src/data/java/galena/oreganized/data/OBlockStates.java @@ -52,6 +52,9 @@ protected void registerStatesAndModels() { meltableTrapdoor(OBlocks.LEAD_TRAPDOOR); meltableBars(OBlocks.LEAD_BARS); + sturdyLever(OBlocks.STURDY_LEVER); + sturdyButton(OBlocks.STURDY_BUTTON); + OBlocks.WAXED_CONCRETE_POWDER.forEach((color, block) -> { var unwaxed = ColorCompat.getColoredBlock("concrete_powder", color); waxedBlock(block, unwaxed); diff --git a/src/data/java/galena/oreganized/data/OBlockTags.java b/src/data/java/galena/oreganized/data/OBlockTags.java index b04e4e82..2038e81a 100644 --- a/src/data/java/galena/oreganized/data/OBlockTags.java +++ b/src/data/java/galena/oreganized/data/OBlockTags.java @@ -1,5 +1,6 @@ package galena.oreganized.data; +import com.simibubi.create.AllTags; import galena.oreganized.ModCompat; import galena.oreganized.Oreganized; import galena.oreganized.index.DyeColors; @@ -95,8 +96,10 @@ protected void addTags(HolderLookup.Provider provider) { tag(BlockTags.DOORS).add(OBlocks.LEAD_DOOR.get()); OBlocks.SILVER_TRAPDOORS.all().forEach(it -> tag(BlockTags.TRAPDOORS).add(it.get())); tag(BlockTags.TRAPDOORS).add(OBlocks.LEAD_TRAPDOOR.get()); + tag(BlockTags.BUTTONS).add(OBlocks.STURDY_BUTTON.get()); tag(BlockTags.SMALL_FLOWERS).add(OBlocks.WHITE_DATURA.get()); tag(BlockTags.SMALL_FLOWERS).add(OBlocks.PURPLE_DATURA.get()); + // Forge tag(Tags.Blocks.ORES).addTags(OTags.Blocks.ORES_SILVER, OTags.Blocks.ORES_LEAD); tag(Tags.Blocks.ORE_RATES_SINGULAR).addTags(OTags.Blocks.ORES_SILVER, OTags.Blocks.ORES_LEAD); @@ -293,5 +296,8 @@ protected void addTags(HolderLookup.Provider provider) { tag(OTags.Blocks.BOMB_BREAKABLE).add(OBlocks.SHRAPNEL_BOMB.get()); tag(OTags.Blocks.CANNON_TNTS).add(OBlocks.SHRAPNEL_BOMB.get()); + + // Create + tag(AllTags.AllBlockTags.WRENCH_PICKUP.tag).add(OBlocks.STURDY_LEVER.get()); } } diff --git a/src/data/java/galena/oreganized/data/ODamageTags.java b/src/data/java/galena/oreganized/data/ODamageTypeTags.java similarity index 77% rename from src/data/java/galena/oreganized/data/ODamageTags.java rename to src/data/java/galena/oreganized/data/ODamageTypeTags.java index e920f78f..0f722adb 100644 --- a/src/data/java/galena/oreganized/data/ODamageTags.java +++ b/src/data/java/galena/oreganized/data/ODamageTypeTags.java @@ -13,9 +13,9 @@ import net.neoforged.neoforge.common.data.ExistingFileHelper; import org.jetbrains.annotations.NotNull; -public class ODamageTags extends TagsProvider { +public class ODamageTypeTags extends TagsProvider { - public ODamageTags(PackOutput output, CompletableFuture future, @Nullable ExistingFileHelper helper) { + public ODamageTypeTags(PackOutput output, CompletableFuture future, @Nullable ExistingFileHelper helper) { super(output, Registries.DAMAGE_TYPE, future, Oreganized.MOD_ID, helper); } @@ -26,6 +26,7 @@ public ODamageTags(PackOutput output, CompletableFuture f @Override protected void addTags(HolderLookup.Provider provider) { + tag(DamageTypeTags.IS_FIRE).add(ODamageSources.MOLTEN_LEAD); tag(DamageTypeTags.NO_KNOCKBACK).add(ODamageSources.MOLTEN_LEAD); } } diff --git a/src/data/java/galena/oreganized/data/OItemTags.java b/src/data/java/galena/oreganized/data/OItemTags.java index 980177e2..016a3298 100644 --- a/src/data/java/galena/oreganized/data/OItemTags.java +++ b/src/data/java/galena/oreganized/data/OItemTags.java @@ -136,6 +136,8 @@ protected void addTags(HolderLookup.Provider provider) { OBlocks.SILVER_TRAPDOORS.all().forEach(it -> tag(ItemTags.TRAPDOORS).add(it.asItem())); tag(ItemTags.TRAPDOORS).add(OBlocks.LEAD_TRAPDOOR.asItem()); + tag(ItemTags.BUTTONS).add(OBlocks.STURDY_BUTTON.asItem()); + tag(ItemTags.AXES).add(OItems.ELECTRUM_AXE.get()); tag(ItemTags.PICKAXES).add(OItems.ELECTRUM_PICKAXE.get()); tag(ItemTags.SWORDS).add(OItems.ELECTRUM_SWORD.get()); diff --git a/src/data/java/galena/oreganized/data/OLang.java b/src/data/java/galena/oreganized/data/OLang.java index 9bcaa67b..c1c79a0e 100644 --- a/src/data/java/galena/oreganized/data/OLang.java +++ b/src/data/java/galena/oreganized/data/OLang.java @@ -89,9 +89,9 @@ protected void addTranslations() { add("item.oreganized.smithing_template.electrum_upgrade.additions_slot_description", "Add Electrum Ingot"); - add("death.attack.lead_bolt", "%1$s was shot %2$s"); - add("death.attack.lead_bolt.item", "%1$s was shot %2$s using %3$s"); - add("death.attack.molten_lead", "%1$s refused to let go of the soaring hot metal"); + add("death.attack.lead_bolt", "%1$s was shot by %2$s"); + add("death.attack.lead_bolt.item", "%1$s was shot by %2$s using %3$s"); + add("death.attack.molten_lead", "%1$s refused to let go of the searing hot metal"); add("attribute.oreganized.kinetic_damage", "Kinetic Damage"); diff --git a/src/data/java/galena/oreganized/data/OLootTables.java b/src/data/java/galena/oreganized/data/OLootTables.java index 1e83e99e..12eee7b7 100644 --- a/src/data/java/galena/oreganized/data/OLootTables.java +++ b/src/data/java/galena/oreganized/data/OLootTables.java @@ -121,6 +121,9 @@ protected void generate() { LootItem.lootTableItem(OBlocks.LEAD_BARS.get()) ))))); + dropSelf(OBlocks.STURDY_LEVER); + dropSelf(OBlocks.STURDY_BUTTON); + OBlocks.CRYSTAL_GLASS.forEach((c, b) -> dyed(c, () -> dropAsSilk(b))); OBlocks.CRYSTAL_GLASS_PANES.forEach((c, b) -> dyed(c, () -> dropAsSilk(b))); OBlocks.WAXED_CONCRETE_POWDER.forEach((c, b) -> dyed(c, () -> dropSelf(b))); diff --git a/src/data/java/galena/oreganized/data/ORecipes.java b/src/data/java/galena/oreganized/data/ORecipes.java index 95907c98..35bdfc83 100644 --- a/src/data/java/galena/oreganized/data/ORecipes.java +++ b/src/data/java/galena/oreganized/data/ORecipes.java @@ -308,6 +308,22 @@ protected void buildRecipes(RecipeOutput consumer) { makeBars(OBlocks.LEAD_BARS, OTags.Items.INGOTS_LEAD).save(consumer); + ShapedRecipeBuilder.shaped(RecipeCategory.REDSTONE, OBlocks.STURDY_LEVER.get()) + .define('#', Items.LEVER) + .define('X', OTags.Items.INGOTS_LEAD) + .pattern("X") + .pattern("#") + .unlockedBy("has_lead", has(OTags.Items.INGOTS_LEAD)) + .save(consumer); + + ShapedRecipeBuilder.shaped(RecipeCategory.REDSTONE, OBlocks.STURDY_BUTTON.get()) + .define('#', ItemTags.STONE_BUTTONS) + .define('X', OTags.Items.INGOTS_LEAD) + .pattern("X") + .pattern("#") + .unlockedBy("has_lead", has(OTags.Items.INGOTS_LEAD)) + .save(consumer); + ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, OItems.SCRIBE.get()) .define('A', Items.AMETHYST_SHARD) .define('S', OTags.Items.INGOTS_SILVER) diff --git a/src/data/java/galena/oreganized/data/OreganizedDatagen.java b/src/data/java/galena/oreganized/data/OreganizedDatagen.java index c26f5760..e3235410 100644 --- a/src/data/java/galena/oreganized/data/OreganizedDatagen.java +++ b/src/data/java/galena/oreganized/data/OreganizedDatagen.java @@ -47,7 +47,7 @@ public static void gatherData(GatherDataEvent event) { CompletableFuture lookupProvider = datapackProvider.getRegistryProvider(); generator.addProvider(server, datapackProvider); generator.addProvider(server, new OBiomeTags(output, lookupProvider, helper)); - generator.addProvider(server, new ODamageTags(output, lookupProvider, helper)); + generator.addProvider(server, new ODamageTypeTags(output, lookupProvider, helper)); generator.addProvider(server, new OPaintingVariantTags(output, lookupProvider, helper)); generator.addProvider(server, new ODataMaps(output, lookupProvider)); diff --git a/src/data/java/galena/oreganized/data/provider/OBlockStateProvider.java b/src/data/java/galena/oreganized/data/provider/OBlockStateProvider.java index a6b09751..5f06e0b5 100644 --- a/src/data/java/galena/oreganized/data/provider/OBlockStateProvider.java +++ b/src/data/java/galena/oreganized/data/provider/OBlockStateProvider.java @@ -1,6 +1,5 @@ package galena.oreganized.data.provider; -import static galena.oreganized.Oreganized.MOD_ID; import static net.neoforged.neoforge.client.model.generators.ModelProvider.BLOCK_FOLDER; import com.teamabnormals.blueprint.core.data.client.BlueprintBlockStateProvider; @@ -11,7 +10,6 @@ import galena.oreganized.content.block.CrystalGlassPaneBlock; import galena.oreganized.content.block.GargoyleBlock; import galena.oreganized.content.block.IMeltableBlock; -import galena.oreganized.content.block.LeadDoorBlock; import galena.oreganized.content.block.MoltenLeadCauldronBlock; import java.util.Arrays; import java.util.List; @@ -22,9 +20,11 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.world.item.DyeColor; import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.ButtonBlock; import net.minecraft.world.level.block.CrossCollisionBlock; import net.minecraft.world.level.block.DoorBlock; import net.minecraft.world.level.block.IronBarsBlock; +import net.minecraft.world.level.block.LeverBlock; import net.minecraft.world.level.block.PipeBlock; import net.minecraft.world.level.block.RedstoneLampBlock; import net.minecraft.world.level.block.RotatedPillarBlock; @@ -42,8 +42,8 @@ public abstract class OBlockStateProvider extends BlueprintBlockStateProvider { - public OBlockStateProvider(PackOutput output, ExistingFileHelper help) { - super(output, MOD_ID, help); + protected OBlockStateProvider(PackOutput output, ExistingFileHelper help) { + super(output, Oreganized.MOD_ID, help); } protected ResourceLocation blockTexture(String name) { @@ -233,24 +233,21 @@ public void meltableDoor(DeferredBlock var baseName = name(block); var prefixes = List.of("", "goopy_", "red_hot_"); - getVariantBuilder(block.get()).forAllStatesExcept((state) -> { - boolean animated = state.hasProperty(LeadDoorBlock.ANIMATED) && state.getValue(LeadDoorBlock.ANIMATED); + getVariantBuilder(block.get()).forAllStatesExcept(state -> { boolean right = state.getValue(DoorBlock.HINGE) == DoorHingeSide.RIGHT; boolean open = state.getValue(DoorBlock.OPEN); boolean lower = state.getValue(DoorBlock.HALF) == DoubleBlockHalf.LOWER; int goopyness = block.get().getGoopyness(state); var name = prefixes.get(goopyness) + baseName; - var textureSuffix = (open - ? animated ? "_closing" : "_open" - : animated ? "_opening" : ""); + var textureSuffix = open ? "_open" : ""; var bottom = blockTexture(goopyness < 2 ? (name + "_bottom" + textureSuffix) : "red_hot_lead"); var top = blockTexture(goopyness < 2 ? (name + "_top" + textureSuffix) : "red_hot_lead"); - var bottomLeft = this.models().doorBottomLeft(name + "_bottom_left" + textureSuffix, bottom, top); - var bottomRight = this.models().doorBottomRight(name + "_bottom_right" + textureSuffix, bottom, top); - var topLeft = this.models().doorTopLeft(name + "_top_left" + textureSuffix, bottom, top); - var topRight = this.models().doorTopRight(name + "_top_right" + textureSuffix, bottom, top); + var bottomLeft = models().doorBottomLeft(name + "_bottom_left" + textureSuffix, bottom, top); + var bottomRight = models().doorBottomRight(name + "_bottom_right" + textureSuffix, bottom, top); + var topLeft = models().doorTopLeft(name + "_top_left" + textureSuffix, bottom, top); + var topRight = models().doorTopRight(name + "_top_right" + textureSuffix, bottom, top); int yRot = (int) state.getValue(DoorBlock.FACING).toYRot() + 90; if (open) { @@ -341,6 +338,77 @@ public void meltableBars(DeferredBloc generatedItem(block.get(), "block"); } + public void sturdyLever(DeferredBlock block) { + var baseName = name(block); + var prefixes = List.of("", "goopy_", "red_hot_"); + + getVariantBuilder(block.get()).forAllStates(state -> { + var facing = state.getValue(LeverBlock.FACING); + var face = state.getValue(LeverBlock.FACE); + boolean powered = state.getValue(LeverBlock.POWERED); + int goopyness = block.get().getGoopyness(state); + + var name = prefixes.get(goopyness) + baseName; + var poweredSuffix = powered ? "_on" : ""; + + ModelFile model = goopyness == 0 + ? models().getExistingFile(blockTexture(name + poweredSuffix)) + : models().withExistingParent(name + poweredSuffix, blockTexture(baseName + poweredSuffix)) + .texture("base", blockTexture(name + "_base")) + .texture("lever", blockTexture(name)); + + return ConfiguredModel.builder() + .modelFile(model) + .rotationX(switch (face) { + case FLOOR -> 0; + case WALL -> 270; + case CEILING -> 180; + }) + .rotationY((int) (switch (face) { + case FLOOR, WALL -> facing; + case CEILING -> facing.getOpposite(); + }).toYRot()) + .build(); + }); + + generatedItem(block.get(), Oreganized.modLoc("block/" + baseName + "_item")); + } + + public void sturdyButton(DeferredBlock block) { + var baseName = name(block); + var prefixes = List.of("", "goopy_", "red_hot_"); + + getVariantBuilder(block.get()).forAllStates(state -> { + var facing = state.getValue(ButtonBlock.FACING); + var face = state.getValue(ButtonBlock.FACE); + boolean powered = state.getValue(ButtonBlock.POWERED); + int goopyness = block.get().getGoopyness(state); + + var name = prefixes.get(goopyness) + baseName; + var poweredSuffix = powered ? "_pressed" : ""; + + ModelFile model = goopyness == 0 + ? models().getExistingFile(blockTexture(name + poweredSuffix)) + : models().withExistingParent(name + poweredSuffix, blockTexture(baseName + poweredSuffix)) + .texture("texture", blockTexture(name)); + + return ConfiguredModel.builder() + .modelFile(model) + .rotationX(switch (face) { + case FLOOR -> 0; + case WALL -> 270; + case CEILING -> 180; + }) + .rotationY((int) (switch (face) { + case FLOOR -> facing.getOpposite(); + case WALL, CEILING -> facing; + }).toYRot()) + .build(); + }); + + simpleBlockItem(block.get(), new ModelFile.ExistingModelFile(blockTexture(block.get()).withSuffix("_inventory"), models().existingFileHelper)); + } + public void gargoyleBlock(DeferredBlock block) { var texture = blockTexture(block.get()); var floorModel = models().getExistingFile(texture); diff --git a/src/generated/resources/assets/oreganized/blockstates/sturdy_button.json b/src/generated/resources/assets/oreganized/blockstates/sturdy_button.json new file mode 100644 index 00000000..45248dc5 --- /dev/null +++ b/src/generated/resources/assets/oreganized/blockstates/sturdy_button.json @@ -0,0 +1,322 @@ +{ + "variants": { + "face=ceiling,facing=east,goopyness=0,powered=false": { + "model": "oreganized:block/sturdy_button", + "x": 180, + "y": 270 + }, + "face=ceiling,facing=east,goopyness=0,powered=true": { + "model": "oreganized:block/sturdy_button_pressed", + "x": 180, + "y": 270 + }, + "face=ceiling,facing=east,goopyness=1,powered=false": { + "model": "oreganized:block/goopy_sturdy_button", + "x": 180, + "y": 270 + }, + "face=ceiling,facing=east,goopyness=1,powered=true": { + "model": "oreganized:block/goopy_sturdy_button_pressed", + "x": 180, + "y": 270 + }, + "face=ceiling,facing=east,goopyness=2,powered=false": { + "model": "oreganized:block/red_hot_sturdy_button", + "x": 180, + "y": 270 + }, + "face=ceiling,facing=east,goopyness=2,powered=true": { + "model": "oreganized:block/red_hot_sturdy_button_pressed", + "x": 180, + "y": 270 + }, + "face=ceiling,facing=north,goopyness=0,powered=false": { + "model": "oreganized:block/sturdy_button", + "x": 180, + "y": 180 + }, + "face=ceiling,facing=north,goopyness=0,powered=true": { + "model": "oreganized:block/sturdy_button_pressed", + "x": 180, + "y": 180 + }, + "face=ceiling,facing=north,goopyness=1,powered=false": { + "model": "oreganized:block/goopy_sturdy_button", + "x": 180, + "y": 180 + }, + "face=ceiling,facing=north,goopyness=1,powered=true": { + "model": "oreganized:block/goopy_sturdy_button_pressed", + "x": 180, + "y": 180 + }, + "face=ceiling,facing=north,goopyness=2,powered=false": { + "model": "oreganized:block/red_hot_sturdy_button", + "x": 180, + "y": 180 + }, + "face=ceiling,facing=north,goopyness=2,powered=true": { + "model": "oreganized:block/red_hot_sturdy_button_pressed", + "x": 180, + "y": 180 + }, + "face=ceiling,facing=south,goopyness=0,powered=false": { + "model": "oreganized:block/sturdy_button", + "x": 180 + }, + "face=ceiling,facing=south,goopyness=0,powered=true": { + "model": "oreganized:block/sturdy_button_pressed", + "x": 180 + }, + "face=ceiling,facing=south,goopyness=1,powered=false": { + "model": "oreganized:block/goopy_sturdy_button", + "x": 180 + }, + "face=ceiling,facing=south,goopyness=1,powered=true": { + "model": "oreganized:block/goopy_sturdy_button_pressed", + "x": 180 + }, + "face=ceiling,facing=south,goopyness=2,powered=false": { + "model": "oreganized:block/red_hot_sturdy_button", + "x": 180 + }, + "face=ceiling,facing=south,goopyness=2,powered=true": { + "model": "oreganized:block/red_hot_sturdy_button_pressed", + "x": 180 + }, + "face=ceiling,facing=west,goopyness=0,powered=false": { + "model": "oreganized:block/sturdy_button", + "x": 180, + "y": 90 + }, + "face=ceiling,facing=west,goopyness=0,powered=true": { + "model": "oreganized:block/sturdy_button_pressed", + "x": 180, + "y": 90 + }, + "face=ceiling,facing=west,goopyness=1,powered=false": { + "model": "oreganized:block/goopy_sturdy_button", + "x": 180, + "y": 90 + }, + "face=ceiling,facing=west,goopyness=1,powered=true": { + "model": "oreganized:block/goopy_sturdy_button_pressed", + "x": 180, + "y": 90 + }, + "face=ceiling,facing=west,goopyness=2,powered=false": { + "model": "oreganized:block/red_hot_sturdy_button", + "x": 180, + "y": 90 + }, + "face=ceiling,facing=west,goopyness=2,powered=true": { + "model": "oreganized:block/red_hot_sturdy_button_pressed", + "x": 180, + "y": 90 + }, + "face=floor,facing=east,goopyness=0,powered=false": { + "model": "oreganized:block/sturdy_button", + "y": 90 + }, + "face=floor,facing=east,goopyness=0,powered=true": { + "model": "oreganized:block/sturdy_button_pressed", + "y": 90 + }, + "face=floor,facing=east,goopyness=1,powered=false": { + "model": "oreganized:block/goopy_sturdy_button", + "y": 90 + }, + "face=floor,facing=east,goopyness=1,powered=true": { + "model": "oreganized:block/goopy_sturdy_button_pressed", + "y": 90 + }, + "face=floor,facing=east,goopyness=2,powered=false": { + "model": "oreganized:block/red_hot_sturdy_button", + "y": 90 + }, + "face=floor,facing=east,goopyness=2,powered=true": { + "model": "oreganized:block/red_hot_sturdy_button_pressed", + "y": 90 + }, + "face=floor,facing=north,goopyness=0,powered=false": { + "model": "oreganized:block/sturdy_button" + }, + "face=floor,facing=north,goopyness=0,powered=true": { + "model": "oreganized:block/sturdy_button_pressed" + }, + "face=floor,facing=north,goopyness=1,powered=false": { + "model": "oreganized:block/goopy_sturdy_button" + }, + "face=floor,facing=north,goopyness=1,powered=true": { + "model": "oreganized:block/goopy_sturdy_button_pressed" + }, + "face=floor,facing=north,goopyness=2,powered=false": { + "model": "oreganized:block/red_hot_sturdy_button" + }, + "face=floor,facing=north,goopyness=2,powered=true": { + "model": "oreganized:block/red_hot_sturdy_button_pressed" + }, + "face=floor,facing=south,goopyness=0,powered=false": { + "model": "oreganized:block/sturdy_button", + "y": 180 + }, + "face=floor,facing=south,goopyness=0,powered=true": { + "model": "oreganized:block/sturdy_button_pressed", + "y": 180 + }, + "face=floor,facing=south,goopyness=1,powered=false": { + "model": "oreganized:block/goopy_sturdy_button", + "y": 180 + }, + "face=floor,facing=south,goopyness=1,powered=true": { + "model": "oreganized:block/goopy_sturdy_button_pressed", + "y": 180 + }, + "face=floor,facing=south,goopyness=2,powered=false": { + "model": "oreganized:block/red_hot_sturdy_button", + "y": 180 + }, + "face=floor,facing=south,goopyness=2,powered=true": { + "model": "oreganized:block/red_hot_sturdy_button_pressed", + "y": 180 + }, + "face=floor,facing=west,goopyness=0,powered=false": { + "model": "oreganized:block/sturdy_button", + "y": 270 + }, + "face=floor,facing=west,goopyness=0,powered=true": { + "model": "oreganized:block/sturdy_button_pressed", + "y": 270 + }, + "face=floor,facing=west,goopyness=1,powered=false": { + "model": "oreganized:block/goopy_sturdy_button", + "y": 270 + }, + "face=floor,facing=west,goopyness=1,powered=true": { + "model": "oreganized:block/goopy_sturdy_button_pressed", + "y": 270 + }, + "face=floor,facing=west,goopyness=2,powered=false": { + "model": "oreganized:block/red_hot_sturdy_button", + "y": 270 + }, + "face=floor,facing=west,goopyness=2,powered=true": { + "model": "oreganized:block/red_hot_sturdy_button_pressed", + "y": 270 + }, + "face=wall,facing=east,goopyness=0,powered=false": { + "model": "oreganized:block/sturdy_button", + "x": 270, + "y": 270 + }, + "face=wall,facing=east,goopyness=0,powered=true": { + "model": "oreganized:block/sturdy_button_pressed", + "x": 270, + "y": 270 + }, + "face=wall,facing=east,goopyness=1,powered=false": { + "model": "oreganized:block/goopy_sturdy_button", + "x": 270, + "y": 270 + }, + "face=wall,facing=east,goopyness=1,powered=true": { + "model": "oreganized:block/goopy_sturdy_button_pressed", + "x": 270, + "y": 270 + }, + "face=wall,facing=east,goopyness=2,powered=false": { + "model": "oreganized:block/red_hot_sturdy_button", + "x": 270, + "y": 270 + }, + "face=wall,facing=east,goopyness=2,powered=true": { + "model": "oreganized:block/red_hot_sturdy_button_pressed", + "x": 270, + "y": 270 + }, + "face=wall,facing=north,goopyness=0,powered=false": { + "model": "oreganized:block/sturdy_button", + "x": 270, + "y": 180 + }, + "face=wall,facing=north,goopyness=0,powered=true": { + "model": "oreganized:block/sturdy_button_pressed", + "x": 270, + "y": 180 + }, + "face=wall,facing=north,goopyness=1,powered=false": { + "model": "oreganized:block/goopy_sturdy_button", + "x": 270, + "y": 180 + }, + "face=wall,facing=north,goopyness=1,powered=true": { + "model": "oreganized:block/goopy_sturdy_button_pressed", + "x": 270, + "y": 180 + }, + "face=wall,facing=north,goopyness=2,powered=false": { + "model": "oreganized:block/red_hot_sturdy_button", + "x": 270, + "y": 180 + }, + "face=wall,facing=north,goopyness=2,powered=true": { + "model": "oreganized:block/red_hot_sturdy_button_pressed", + "x": 270, + "y": 180 + }, + "face=wall,facing=south,goopyness=0,powered=false": { + "model": "oreganized:block/sturdy_button", + "x": 270 + }, + "face=wall,facing=south,goopyness=0,powered=true": { + "model": "oreganized:block/sturdy_button_pressed", + "x": 270 + }, + "face=wall,facing=south,goopyness=1,powered=false": { + "model": "oreganized:block/goopy_sturdy_button", + "x": 270 + }, + "face=wall,facing=south,goopyness=1,powered=true": { + "model": "oreganized:block/goopy_sturdy_button_pressed", + "x": 270 + }, + "face=wall,facing=south,goopyness=2,powered=false": { + "model": "oreganized:block/red_hot_sturdy_button", + "x": 270 + }, + "face=wall,facing=south,goopyness=2,powered=true": { + "model": "oreganized:block/red_hot_sturdy_button_pressed", + "x": 270 + }, + "face=wall,facing=west,goopyness=0,powered=false": { + "model": "oreganized:block/sturdy_button", + "x": 270, + "y": 90 + }, + "face=wall,facing=west,goopyness=0,powered=true": { + "model": "oreganized:block/sturdy_button_pressed", + "x": 270, + "y": 90 + }, + "face=wall,facing=west,goopyness=1,powered=false": { + "model": "oreganized:block/goopy_sturdy_button", + "x": 270, + "y": 90 + }, + "face=wall,facing=west,goopyness=1,powered=true": { + "model": "oreganized:block/goopy_sturdy_button_pressed", + "x": 270, + "y": 90 + }, + "face=wall,facing=west,goopyness=2,powered=false": { + "model": "oreganized:block/red_hot_sturdy_button", + "x": 270, + "y": 90 + }, + "face=wall,facing=west,goopyness=2,powered=true": { + "model": "oreganized:block/red_hot_sturdy_button_pressed", + "x": 270, + "y": 90 + } + } +} diff --git a/src/generated/resources/assets/oreganized/blockstates/sturdy_lever.json b/src/generated/resources/assets/oreganized/blockstates/sturdy_lever.json new file mode 100644 index 00000000..b241a934 --- /dev/null +++ b/src/generated/resources/assets/oreganized/blockstates/sturdy_lever.json @@ -0,0 +1,322 @@ +{ + "variants": { + "face=ceiling,facing=east,goopyness=0,powered=false": { + "model": "oreganized:block/sturdy_lever", + "x": 180, + "y": 90 + }, + "face=ceiling,facing=east,goopyness=0,powered=true": { + "model": "oreganized:block/sturdy_lever_on", + "x": 180, + "y": 90 + }, + "face=ceiling,facing=east,goopyness=1,powered=false": { + "model": "oreganized:block/goopy_sturdy_lever", + "x": 180, + "y": 90 + }, + "face=ceiling,facing=east,goopyness=1,powered=true": { + "model": "oreganized:block/goopy_sturdy_lever_on", + "x": 180, + "y": 90 + }, + "face=ceiling,facing=east,goopyness=2,powered=false": { + "model": "oreganized:block/red_hot_sturdy_lever", + "x": 180, + "y": 90 + }, + "face=ceiling,facing=east,goopyness=2,powered=true": { + "model": "oreganized:block/red_hot_sturdy_lever_on", + "x": 180, + "y": 90 + }, + "face=ceiling,facing=north,goopyness=0,powered=false": { + "model": "oreganized:block/sturdy_lever", + "x": 180 + }, + "face=ceiling,facing=north,goopyness=0,powered=true": { + "model": "oreganized:block/sturdy_lever_on", + "x": 180 + }, + "face=ceiling,facing=north,goopyness=1,powered=false": { + "model": "oreganized:block/goopy_sturdy_lever", + "x": 180 + }, + "face=ceiling,facing=north,goopyness=1,powered=true": { + "model": "oreganized:block/goopy_sturdy_lever_on", + "x": 180 + }, + "face=ceiling,facing=north,goopyness=2,powered=false": { + "model": "oreganized:block/red_hot_sturdy_lever", + "x": 180 + }, + "face=ceiling,facing=north,goopyness=2,powered=true": { + "model": "oreganized:block/red_hot_sturdy_lever_on", + "x": 180 + }, + "face=ceiling,facing=south,goopyness=0,powered=false": { + "model": "oreganized:block/sturdy_lever", + "x": 180, + "y": 180 + }, + "face=ceiling,facing=south,goopyness=0,powered=true": { + "model": "oreganized:block/sturdy_lever_on", + "x": 180, + "y": 180 + }, + "face=ceiling,facing=south,goopyness=1,powered=false": { + "model": "oreganized:block/goopy_sturdy_lever", + "x": 180, + "y": 180 + }, + "face=ceiling,facing=south,goopyness=1,powered=true": { + "model": "oreganized:block/goopy_sturdy_lever_on", + "x": 180, + "y": 180 + }, + "face=ceiling,facing=south,goopyness=2,powered=false": { + "model": "oreganized:block/red_hot_sturdy_lever", + "x": 180, + "y": 180 + }, + "face=ceiling,facing=south,goopyness=2,powered=true": { + "model": "oreganized:block/red_hot_sturdy_lever_on", + "x": 180, + "y": 180 + }, + "face=ceiling,facing=west,goopyness=0,powered=false": { + "model": "oreganized:block/sturdy_lever", + "x": 180, + "y": 270 + }, + "face=ceiling,facing=west,goopyness=0,powered=true": { + "model": "oreganized:block/sturdy_lever_on", + "x": 180, + "y": 270 + }, + "face=ceiling,facing=west,goopyness=1,powered=false": { + "model": "oreganized:block/goopy_sturdy_lever", + "x": 180, + "y": 270 + }, + "face=ceiling,facing=west,goopyness=1,powered=true": { + "model": "oreganized:block/goopy_sturdy_lever_on", + "x": 180, + "y": 270 + }, + "face=ceiling,facing=west,goopyness=2,powered=false": { + "model": "oreganized:block/red_hot_sturdy_lever", + "x": 180, + "y": 270 + }, + "face=ceiling,facing=west,goopyness=2,powered=true": { + "model": "oreganized:block/red_hot_sturdy_lever_on", + "x": 180, + "y": 270 + }, + "face=floor,facing=east,goopyness=0,powered=false": { + "model": "oreganized:block/sturdy_lever", + "y": 270 + }, + "face=floor,facing=east,goopyness=0,powered=true": { + "model": "oreganized:block/sturdy_lever_on", + "y": 270 + }, + "face=floor,facing=east,goopyness=1,powered=false": { + "model": "oreganized:block/goopy_sturdy_lever", + "y": 270 + }, + "face=floor,facing=east,goopyness=1,powered=true": { + "model": "oreganized:block/goopy_sturdy_lever_on", + "y": 270 + }, + "face=floor,facing=east,goopyness=2,powered=false": { + "model": "oreganized:block/red_hot_sturdy_lever", + "y": 270 + }, + "face=floor,facing=east,goopyness=2,powered=true": { + "model": "oreganized:block/red_hot_sturdy_lever_on", + "y": 270 + }, + "face=floor,facing=north,goopyness=0,powered=false": { + "model": "oreganized:block/sturdy_lever", + "y": 180 + }, + "face=floor,facing=north,goopyness=0,powered=true": { + "model": "oreganized:block/sturdy_lever_on", + "y": 180 + }, + "face=floor,facing=north,goopyness=1,powered=false": { + "model": "oreganized:block/goopy_sturdy_lever", + "y": 180 + }, + "face=floor,facing=north,goopyness=1,powered=true": { + "model": "oreganized:block/goopy_sturdy_lever_on", + "y": 180 + }, + "face=floor,facing=north,goopyness=2,powered=false": { + "model": "oreganized:block/red_hot_sturdy_lever", + "y": 180 + }, + "face=floor,facing=north,goopyness=2,powered=true": { + "model": "oreganized:block/red_hot_sturdy_lever_on", + "y": 180 + }, + "face=floor,facing=south,goopyness=0,powered=false": { + "model": "oreganized:block/sturdy_lever" + }, + "face=floor,facing=south,goopyness=0,powered=true": { + "model": "oreganized:block/sturdy_lever_on" + }, + "face=floor,facing=south,goopyness=1,powered=false": { + "model": "oreganized:block/goopy_sturdy_lever" + }, + "face=floor,facing=south,goopyness=1,powered=true": { + "model": "oreganized:block/goopy_sturdy_lever_on" + }, + "face=floor,facing=south,goopyness=2,powered=false": { + "model": "oreganized:block/red_hot_sturdy_lever" + }, + "face=floor,facing=south,goopyness=2,powered=true": { + "model": "oreganized:block/red_hot_sturdy_lever_on" + }, + "face=floor,facing=west,goopyness=0,powered=false": { + "model": "oreganized:block/sturdy_lever", + "y": 90 + }, + "face=floor,facing=west,goopyness=0,powered=true": { + "model": "oreganized:block/sturdy_lever_on", + "y": 90 + }, + "face=floor,facing=west,goopyness=1,powered=false": { + "model": "oreganized:block/goopy_sturdy_lever", + "y": 90 + }, + "face=floor,facing=west,goopyness=1,powered=true": { + "model": "oreganized:block/goopy_sturdy_lever_on", + "y": 90 + }, + "face=floor,facing=west,goopyness=2,powered=false": { + "model": "oreganized:block/red_hot_sturdy_lever", + "y": 90 + }, + "face=floor,facing=west,goopyness=2,powered=true": { + "model": "oreganized:block/red_hot_sturdy_lever_on", + "y": 90 + }, + "face=wall,facing=east,goopyness=0,powered=false": { + "model": "oreganized:block/sturdy_lever", + "x": 270, + "y": 270 + }, + "face=wall,facing=east,goopyness=0,powered=true": { + "model": "oreganized:block/sturdy_lever_on", + "x": 270, + "y": 270 + }, + "face=wall,facing=east,goopyness=1,powered=false": { + "model": "oreganized:block/goopy_sturdy_lever", + "x": 270, + "y": 270 + }, + "face=wall,facing=east,goopyness=1,powered=true": { + "model": "oreganized:block/goopy_sturdy_lever_on", + "x": 270, + "y": 270 + }, + "face=wall,facing=east,goopyness=2,powered=false": { + "model": "oreganized:block/red_hot_sturdy_lever", + "x": 270, + "y": 270 + }, + "face=wall,facing=east,goopyness=2,powered=true": { + "model": "oreganized:block/red_hot_sturdy_lever_on", + "x": 270, + "y": 270 + }, + "face=wall,facing=north,goopyness=0,powered=false": { + "model": "oreganized:block/sturdy_lever", + "x": 270, + "y": 180 + }, + "face=wall,facing=north,goopyness=0,powered=true": { + "model": "oreganized:block/sturdy_lever_on", + "x": 270, + "y": 180 + }, + "face=wall,facing=north,goopyness=1,powered=false": { + "model": "oreganized:block/goopy_sturdy_lever", + "x": 270, + "y": 180 + }, + "face=wall,facing=north,goopyness=1,powered=true": { + "model": "oreganized:block/goopy_sturdy_lever_on", + "x": 270, + "y": 180 + }, + "face=wall,facing=north,goopyness=2,powered=false": { + "model": "oreganized:block/red_hot_sturdy_lever", + "x": 270, + "y": 180 + }, + "face=wall,facing=north,goopyness=2,powered=true": { + "model": "oreganized:block/red_hot_sturdy_lever_on", + "x": 270, + "y": 180 + }, + "face=wall,facing=south,goopyness=0,powered=false": { + "model": "oreganized:block/sturdy_lever", + "x": 270 + }, + "face=wall,facing=south,goopyness=0,powered=true": { + "model": "oreganized:block/sturdy_lever_on", + "x": 270 + }, + "face=wall,facing=south,goopyness=1,powered=false": { + "model": "oreganized:block/goopy_sturdy_lever", + "x": 270 + }, + "face=wall,facing=south,goopyness=1,powered=true": { + "model": "oreganized:block/goopy_sturdy_lever_on", + "x": 270 + }, + "face=wall,facing=south,goopyness=2,powered=false": { + "model": "oreganized:block/red_hot_sturdy_lever", + "x": 270 + }, + "face=wall,facing=south,goopyness=2,powered=true": { + "model": "oreganized:block/red_hot_sturdy_lever_on", + "x": 270 + }, + "face=wall,facing=west,goopyness=0,powered=false": { + "model": "oreganized:block/sturdy_lever", + "x": 270, + "y": 90 + }, + "face=wall,facing=west,goopyness=0,powered=true": { + "model": "oreganized:block/sturdy_lever_on", + "x": 270, + "y": 90 + }, + "face=wall,facing=west,goopyness=1,powered=false": { + "model": "oreganized:block/goopy_sturdy_lever", + "x": 270, + "y": 90 + }, + "face=wall,facing=west,goopyness=1,powered=true": { + "model": "oreganized:block/goopy_sturdy_lever_on", + "x": 270, + "y": 90 + }, + "face=wall,facing=west,goopyness=2,powered=false": { + "model": "oreganized:block/red_hot_sturdy_lever", + "x": 270, + "y": 90 + }, + "face=wall,facing=west,goopyness=2,powered=true": { + "model": "oreganized:block/red_hot_sturdy_lever_on", + "x": 270, + "y": 90 + } + } +} diff --git a/src/generated/resources/assets/oreganized/lang/en_us.json b/src/generated/resources/assets/oreganized/lang/en_us.json index 642d46b1..9f050d67 100644 --- a/src/generated/resources/assets/oreganized/lang/en_us.json +++ b/src/generated/resources/assets/oreganized/lang/en_us.json @@ -146,6 +146,8 @@ "block.oreganized.slate_crystal_glass": "Slate Crystal Glass", "block.oreganized.slate_crystal_glass_pane": "Slate Crystal Glass Pane", "block.oreganized.spotted_glance": "Spotted Glance", + "block.oreganized.sturdy_button": "Sturdy Button", + "block.oreganized.sturdy_lever": "Sturdy Lever", "block.oreganized.tan_crystal_glass": "Tan Crystal Glass", "block.oreganized.tan_crystal_glass_pane": "Tan Crystal Glass Pane", "block.oreganized.tarnished_chiseled_silver": "Tarnished Chiseled Silver", @@ -200,9 +202,9 @@ "block.oreganized.white_crystal_glass_pane": "White Crystal Glass Pane", "block.oreganized.yellow_crystal_glass": "Yellow Crystal Glass", "block.oreganized.yellow_crystal_glass_pane": "Yellow Crystal Glass Pane", - "death.attack.lead_bolt": "%1$s was shot %2$s", - "death.attack.lead_bolt.item": "%1$s was shot %2$s using %3$s", - "death.attack.molten_lead": "%1$s refused to let go of the soaring hot metal", + "death.attack.lead_bolt": "%1$s was shot by %2$s", + "death.attack.lead_bolt.item": "%1$s was shot by %2$s using %3$s", + "death.attack.molten_lead": "%1$s refused to let go of the searing hot metal", "effect.oreganized.stunning": "Brain Damage", "effect.oreganized.stunning.description": "Paralyzes the victim periodically with random intervals", "entity.oreganized.lead_bolt": "Lead Bolt", @@ -272,4 +274,4 @@ "trim_material.oreganized.lead": "Lead material", "trim_material.oreganized.silver": "Silver material", "upgrade.oreganized.electrum_upgrade": "Electrum Upgrade" -} \ No newline at end of file +} diff --git a/src/generated/resources/assets/oreganized/models/block/goopy_sturdy_button.json b/src/generated/resources/assets/oreganized/models/block/goopy_sturdy_button.json new file mode 100644 index 00000000..220545fe --- /dev/null +++ b/src/generated/resources/assets/oreganized/models/block/goopy_sturdy_button.json @@ -0,0 +1,6 @@ +{ + "parent": "oreganized:block/sturdy_button", + "textures": { + "texture": "oreganized:block/goopy_sturdy_button" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/oreganized/models/block/goopy_sturdy_button_pressed.json b/src/generated/resources/assets/oreganized/models/block/goopy_sturdy_button_pressed.json new file mode 100644 index 00000000..5af6ce98 --- /dev/null +++ b/src/generated/resources/assets/oreganized/models/block/goopy_sturdy_button_pressed.json @@ -0,0 +1,6 @@ +{ + "parent": "oreganized:block/sturdy_button_pressed", + "textures": { + "texture": "oreganized:block/goopy_sturdy_button" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/oreganized/models/block/goopy_sturdy_lever.json b/src/generated/resources/assets/oreganized/models/block/goopy_sturdy_lever.json new file mode 100644 index 00000000..b62ed348 --- /dev/null +++ b/src/generated/resources/assets/oreganized/models/block/goopy_sturdy_lever.json @@ -0,0 +1,7 @@ +{ + "parent": "oreganized:block/sturdy_lever", + "textures": { + "base": "oreganized:block/goopy_sturdy_lever_base", + "lever": "oreganized:block/goopy_sturdy_lever" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/oreganized/models/block/goopy_sturdy_lever_on.json b/src/generated/resources/assets/oreganized/models/block/goopy_sturdy_lever_on.json new file mode 100644 index 00000000..628d01bb --- /dev/null +++ b/src/generated/resources/assets/oreganized/models/block/goopy_sturdy_lever_on.json @@ -0,0 +1,7 @@ +{ + "parent": "oreganized:block/sturdy_lever_on", + "textures": { + "base": "oreganized:block/goopy_sturdy_lever_base", + "lever": "oreganized:block/goopy_sturdy_lever" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/oreganized/models/block/red_hot_sturdy_button.json b/src/generated/resources/assets/oreganized/models/block/red_hot_sturdy_button.json new file mode 100644 index 00000000..b79c7af2 --- /dev/null +++ b/src/generated/resources/assets/oreganized/models/block/red_hot_sturdy_button.json @@ -0,0 +1,6 @@ +{ + "parent": "oreganized:block/sturdy_button", + "textures": { + "texture": "oreganized:block/red_hot_sturdy_button" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/oreganized/models/block/red_hot_sturdy_button_pressed.json b/src/generated/resources/assets/oreganized/models/block/red_hot_sturdy_button_pressed.json new file mode 100644 index 00000000..4cc045b7 --- /dev/null +++ b/src/generated/resources/assets/oreganized/models/block/red_hot_sturdy_button_pressed.json @@ -0,0 +1,6 @@ +{ + "parent": "oreganized:block/sturdy_button_pressed", + "textures": { + "texture": "oreganized:block/red_hot_sturdy_button" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/oreganized/models/block/red_hot_sturdy_lever.json b/src/generated/resources/assets/oreganized/models/block/red_hot_sturdy_lever.json new file mode 100644 index 00000000..89c98b81 --- /dev/null +++ b/src/generated/resources/assets/oreganized/models/block/red_hot_sturdy_lever.json @@ -0,0 +1,7 @@ +{ + "parent": "oreganized:block/sturdy_lever", + "textures": { + "base": "oreganized:block/red_hot_sturdy_lever_base", + "lever": "oreganized:block/red_hot_sturdy_lever" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/oreganized/models/block/red_hot_sturdy_lever_on.json b/src/generated/resources/assets/oreganized/models/block/red_hot_sturdy_lever_on.json new file mode 100644 index 00000000..3f0e96ee --- /dev/null +++ b/src/generated/resources/assets/oreganized/models/block/red_hot_sturdy_lever_on.json @@ -0,0 +1,7 @@ +{ + "parent": "oreganized:block/sturdy_lever_on", + "textures": { + "base": "oreganized:block/red_hot_sturdy_lever_base", + "lever": "oreganized:block/red_hot_sturdy_lever" + } +} \ No newline at end of file diff --git a/src/generated/resources/assets/oreganized/models/item/sturdy_button.json b/src/generated/resources/assets/oreganized/models/item/sturdy_button.json new file mode 100644 index 00000000..a9d78199 --- /dev/null +++ b/src/generated/resources/assets/oreganized/models/item/sturdy_button.json @@ -0,0 +1,3 @@ +{ + "parent": "oreganized:block/sturdy_button_inventory" +} diff --git a/src/generated/resources/assets/oreganized/models/item/sturdy_lever.json b/src/generated/resources/assets/oreganized/models/item/sturdy_lever.json new file mode 100644 index 00000000..8dd14a0a --- /dev/null +++ b/src/generated/resources/assets/oreganized/models/item/sturdy_lever.json @@ -0,0 +1,6 @@ +{ + "parent": "minecraft:item/generated", + "textures": { + "layer0": "oreganized:block/sturdy_lever_item" + } +} diff --git a/src/generated/resources/data/create/tags/block/wrench_pickup.json b/src/generated/resources/data/create/tags/block/wrench_pickup.json new file mode 100644 index 00000000..8fdeb7c8 --- /dev/null +++ b/src/generated/resources/data/create/tags/block/wrench_pickup.json @@ -0,0 +1,5 @@ +{ + "values": [ + "oreganized:sturdy_lever" + ] +} diff --git a/src/generated/resources/data/minecraft/tags/block/buttons.json b/src/generated/resources/data/minecraft/tags/block/buttons.json new file mode 100644 index 00000000..4f1e4ede --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/block/buttons.json @@ -0,0 +1,5 @@ +{ + "values": [ + "oreganized:sturdy_button" + ] +} diff --git a/src/generated/resources/data/minecraft/tags/damage_type/is_fire.json b/src/generated/resources/data/minecraft/tags/damage_type/is_fire.json new file mode 100644 index 00000000..72efccbd --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/damage_type/is_fire.json @@ -0,0 +1,5 @@ +{ + "values": [ + "oreganized:molten_lead" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/minecraft/tags/item/buttons.json b/src/generated/resources/data/minecraft/tags/item/buttons.json new file mode 100644 index 00000000..4f1e4ede --- /dev/null +++ b/src/generated/resources/data/minecraft/tags/item/buttons.json @@ -0,0 +1,5 @@ +{ + "values": [ + "oreganized:sturdy_button" + ] +} diff --git a/src/generated/resources/data/oreganized/advancement/recipes/redstone/sturdy_button.json b/src/generated/resources/data/oreganized/advancement/recipes/redstone/sturdy_button.json new file mode 100644 index 00000000..9ecf322c --- /dev/null +++ b/src/generated/resources/data/oreganized/advancement/recipes/redstone/sturdy_button.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_lead": { + "conditions": { + "items": [ + { + "items": "#c:ingots/lead" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "oreganized:sturdy_button" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_lead" + ] + ], + "rewards": { + "recipes": [ + "oreganized:sturdy_button" + ] + } +} diff --git a/src/generated/resources/data/oreganized/advancement/recipes/redstone/sturdy_lever.json b/src/generated/resources/data/oreganized/advancement/recipes/redstone/sturdy_lever.json new file mode 100644 index 00000000..e44c7b5c --- /dev/null +++ b/src/generated/resources/data/oreganized/advancement/recipes/redstone/sturdy_lever.json @@ -0,0 +1,32 @@ +{ + "parent": "minecraft:recipes/root", + "criteria": { + "has_lead": { + "conditions": { + "items": [ + { + "items": "#c:ingots/lead" + } + ] + }, + "trigger": "minecraft:inventory_changed" + }, + "has_the_recipe": { + "conditions": { + "recipe": "oreganized:sturdy_lever" + }, + "trigger": "minecraft:recipe_unlocked" + } + }, + "requirements": [ + [ + "has_the_recipe", + "has_lead" + ] + ], + "rewards": { + "recipes": [ + "oreganized:sturdy_lever" + ] + } +} diff --git a/src/generated/resources/data/oreganized/loot_table/blocks/sturdy_button.json b/src/generated/resources/data/oreganized/loot_table/blocks/sturdy_button.json new file mode 100644 index 00000000..99a75e96 --- /dev/null +++ b/src/generated/resources/data/oreganized/loot_table/blocks/sturdy_button.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "oreganized:sturdy_button" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "oreganized:blocks/sturdy_button" +} diff --git a/src/generated/resources/data/oreganized/loot_table/blocks/sturdy_lever.json b/src/generated/resources/data/oreganized/loot_table/blocks/sturdy_lever.json new file mode 100644 index 00000000..21f2dc25 --- /dev/null +++ b/src/generated/resources/data/oreganized/loot_table/blocks/sturdy_lever.json @@ -0,0 +1,21 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "bonus_rolls": 0.0, + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ], + "entries": [ + { + "type": "minecraft:item", + "name": "oreganized:sturdy_lever" + } + ], + "rolls": 1.0 + } + ], + "random_sequence": "oreganized:blocks/sturdy_lever" +} diff --git a/src/generated/resources/data/oreganized/recipe/sturdy_button.json b/src/generated/resources/data/oreganized/recipe/sturdy_button.json new file mode 100644 index 00000000..457288be --- /dev/null +++ b/src/generated/resources/data/oreganized/recipe/sturdy_button.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "redstone", + "key": { + "#": { + "tag": "minecraft:stone_buttons" + }, + "X": { + "tag": "c:ingots/lead" + } + }, + "pattern": [ + "X", + "#" + ], + "result": { + "count": 1, + "id": "oreganized:sturdy_button" + } +} diff --git a/src/generated/resources/data/oreganized/recipe/sturdy_lever.json b/src/generated/resources/data/oreganized/recipe/sturdy_lever.json new file mode 100644 index 00000000..2d35393b --- /dev/null +++ b/src/generated/resources/data/oreganized/recipe/sturdy_lever.json @@ -0,0 +1,20 @@ +{ + "type": "minecraft:crafting_shaped", + "category": "redstone", + "key": { + "#": { + "item": "minecraft:lever" + }, + "X": { + "tag": "c:ingots/lead" + } + }, + "pattern": [ + "X", + "#" + ], + "result": { + "count": 1, + "id": "oreganized:sturdy_lever" + } +} diff --git a/src/main/java/galena/oreganized/OTabs.java b/src/main/java/galena/oreganized/OTabs.java index 9406f4aa..bd63d6c3 100644 --- a/src/main/java/galena/oreganized/OTabs.java +++ b/src/main/java/galena/oreganized/OTabs.java @@ -24,7 +24,7 @@ import org.infernalstudios.shieldexp.init.ItemsInit; import vectorwing.farmersdelight.common.registry.ModItems; -@EventBusSubscriber(modid = Oreganized.MOD_ID, bus = EventBusSubscriber.Bus.MOD) +@EventBusSubscriber(modid = Oreganized.MOD_ID) public class OTabs { private static final ResourceLocation FD_TAB = ResourceLocation.fromNamespaceAndPath(FARMERS_DELIGHT_ID, FARMERS_DELIGHT_ID); @@ -35,7 +35,7 @@ public static void buildCreativeModeTabContents(BuildCreativeModeTabContentsEven ResourceKey tab = event.getTabKey(); if (tab == CreativeModeTabs.NATURAL_BLOCKS || tab == CreativeModeTabs.BUILDING_BLOCKS) { - putBefore(event, Items.DEEPSLATE, OBlocks.GLANCE); + putBefore(event, Blocks.DEEPSLATE, OBlocks.GLANCE); putAfter(event, OBlocks.GLANCE.get(), OBlocks.SPOTTED_GLANCE); } @@ -53,18 +53,18 @@ public static void buildCreativeModeTabContents(BuildCreativeModeTabContentsEven putAfter(event, OBlocks.GLANCE_BRICK_SLAB.get(), OBlocks.GLANCE_BRICK_WALL); putAfter(event, OBlocks.GLANCE_BRICK_WALL.get(), OBlocks.WAXED_SPOTTED_GLANCE); - putBefore(event, Items.GOLD_BLOCK, OBlocks.SILVER_BLOCKS.array()); - putBefore(event, Items.GOLD_BLOCK, OBlocks.CHISELED_SILVER.array()); - putBefore(event, Items.GOLD_BLOCK, OBlocks.SILVER_LATTICES.array()); - putBefore(event, Items.GOLD_BLOCK, OBlocks.SILVER_PILLARS.array()); - putBefore(event, Items.GOLD_BLOCK, OBlocks.CUT_SILVERS.array()); - putBefore(event, Items.GOLD_BLOCK, OBlocks.CUT_SILVER_STAIRS.array()); - putBefore(event, Items.GOLD_BLOCK, OBlocks.CUT_SILVER_SLABS.array()); - putBefore(event, Items.GOLD_BLOCK, OBlocks.SILVER_BARS.array()); - putBefore(event, Items.GOLD_BLOCK, OBlocks.SILVER_DOORS.array()); - putBefore(event, Items.GOLD_BLOCK, OBlocks.SILVER_TRAPDOORS.array()); - putBefore(event, Items.NETHERITE_BLOCK, OBlocks.ELECTRUM_BLOCK); - putAfter(event, Items.WAXED_OXIDIZED_CUT_COPPER_SLAB, OBlocks.LEAD_BLOCK); + putBefore(event, Blocks.GOLD_BLOCK, OBlocks.SILVER_BLOCKS.array()); + putBefore(event, Blocks.GOLD_BLOCK, OBlocks.CHISELED_SILVER.array()); + putBefore(event, Blocks.GOLD_BLOCK, OBlocks.SILVER_LATTICES.array()); + putBefore(event, Blocks.GOLD_BLOCK, OBlocks.SILVER_PILLARS.array()); + putBefore(event, Blocks.GOLD_BLOCK, OBlocks.CUT_SILVERS.array()); + putBefore(event, Blocks.GOLD_BLOCK, OBlocks.CUT_SILVER_STAIRS.array()); + putBefore(event, Blocks.GOLD_BLOCK, OBlocks.CUT_SILVER_SLABS.array()); + putBefore(event, Blocks.GOLD_BLOCK, OBlocks.SILVER_BARS.array()); + putBefore(event, Blocks.GOLD_BLOCK, OBlocks.SILVER_DOORS.array()); + putBefore(event, Blocks.GOLD_BLOCK, OBlocks.SILVER_TRAPDOORS.array()); + putBefore(event, Blocks.NETHERITE_BLOCK, OBlocks.ELECTRUM_BLOCK); + putAfter(event, Blocks.WAXED_OXIDIZED_COPPER_BULB, OBlocks.LEAD_BLOCK); putAfter(event, OBlocks.LEAD_BLOCK.get(), OBlocks.CUT_LEAD); putAfter(event, OBlocks.CUT_LEAD.get(), OBlocks.LEAD_BRICKS); putAfter(event, OBlocks.LEAD_BRICKS.get(), OBlocks.LEAD_PILLAR); @@ -77,37 +77,42 @@ public static void buildCreativeModeTabContents(BuildCreativeModeTabContentsEven if (tab == CreativeModeTabs.FUNCTIONAL_BLOCKS) { putBefore(event, Blocks.BARREL, OBlocks.LEAD_BOLT_CRATE); - putBefore(event, Items.REDSTONE_LAMP, OBlocks.SILVER_BULBS.array()); + putBefore(event, Blocks.REDSTONE_LAMP, OBlocks.SILVER_BULBS.array()); } if (tab == CreativeModeTabs.COLORED_BLOCKS) { OBlocks.CRYSTAL_GLASS.entrySet() .stream() .sorted(Map.Entry.comparingByKey(DyeColors.comparator())) - .forEach(entry -> putBefore(event, Items.GLASS_PANE, entry.getValue())); + .forEach(entry -> putBefore(event, Blocks.GLASS_PANE, entry.getValue())); OBlocks.CRYSTAL_GLASS_PANES.entrySet() .stream() .sorted(Map.Entry.comparingByKey(DyeColors.comparator())) - .forEach(entry -> putAfter(event, Items.SHULKER_BOX, entry.getValue())); + .forEach(entry -> putAfter(event, Blocks.SHULKER_BOX, entry.getValue())); OBlocks.WAXED_CONCRETE_POWDER.entrySet() .stream() .sorted(Map.Entry.comparingByKey(DyeColors.comparator())) - .forEach(entry -> putBefore(event, Items.WHITE_GLAZED_TERRACOTTA, entry.getValue())); + .forEach(entry -> putBefore(event, Blocks.WHITE_GLAZED_TERRACOTTA, entry.getValue())); } if (tab == CreativeModeTabs.NATURAL_BLOCKS) { - putAfter(event, Items.DEEPSLATE_COPPER_ORE, OBlocks.LEAD_ORE); + putAfter(event, Blocks.DEEPSLATE_COPPER_ORE, OBlocks.LEAD_ORE); putAfter(event, OBlocks.LEAD_ORE.get(), OBlocks.DEEPSLATE_LEAD_ORE); - putAfter(event, Items.DEEPSLATE_GOLD_ORE, OBlocks.SILVER_ORE); + putAfter(event, Blocks.DEEPSLATE_GOLD_ORE, OBlocks.SILVER_ORE); putAfter(event, OBlocks.SILVER_ORE.get(), OBlocks.DEEPSLATE_SILVER_ORE); - putAfter(event, Items.RAW_COPPER_BLOCK, OBlocks.RAW_LEAD_BLOCK); - putAfter(event, Items.RAW_GOLD_BLOCK, OBlocks.RAW_SILVER_BLOCK); + putAfter(event, Blocks.RAW_COPPER_BLOCK, OBlocks.RAW_LEAD_BLOCK); + putAfter(event, Blocks.RAW_GOLD_BLOCK, OBlocks.RAW_SILVER_BLOCK); + } + + if (tab == CreativeModeTabs.REDSTONE_BLOCKS) { + putAfter(event, Blocks.LEVER, OBlocks.STURDY_LEVER); + putAfter(event, Blocks.STONE_BUTTON, OBlocks.STURDY_BUTTON); } if (tab == CreativeModeTabs.REDSTONE_BLOCKS || tab == CreativeModeTabs.FUNCTIONAL_BLOCKS) { - putBefore(event, Items.NOTE_BLOCK, OBlocks.GARGOYLE); + putBefore(event, Blocks.NOTE_BLOCK, OBlocks.GARGOYLE); putAfter(event, Blocks.REDSTONE_LAMP, OBlocks.LEAD_BULB); } @@ -116,7 +121,7 @@ public static void buildCreativeModeTabContents(BuildCreativeModeTabContentsEven } if (tab == CreativeModeTabs.REDSTONE_BLOCKS || tab == CreativeModeTabs.COMBAT) { - putAfter(event, Items.TNT, OBlocks.SHRAPNEL_BOMB); + putAfter(event, Blocks.TNT, OBlocks.SHRAPNEL_BOMB); } if (tab == CreativeModeTabs.REDSTONE_BLOCKS) { @@ -165,18 +170,17 @@ public static void buildCreativeModeTabContents(BuildCreativeModeTabContentsEven putBefore(event, Items.NETHERITE_UPGRADE_SMITHING_TEMPLATE, OItems.ELECTRUM_UPGRADE_SMITHING_TEMPLATE); } - if (tab == CreativeModeTabs.NATURAL_BLOCKS) { - putAfter(event, Items.LILY_OF_THE_VALLEY, OBlocks.PURPLE_DATURA); + putAfter(event, Blocks.LILY_OF_THE_VALLEY, OBlocks.PURPLE_DATURA); putAfter(event, OBlocks.PURPLE_DATURA.get(), OBlocks.WHITE_DATURA); } if (ModList.get().isLoaded(FARMERS_DELIGHT_ID) && tab.location().equals(FD_TAB)) { putAfter(event, ModItems.NETHERITE_KNIFE.get(), OItems.ELECTRUM_KNIFE); } - if (ModList.get().isLoaded(SHIELD_EXPANSION_ID) && tab == CreativeModeTabs.COMBAT) { - putAfter(event, ItemsInit.NETHERITE_SHIELD.get(), OItems.ELECTRUM_SHIELD); - } + if (ModList.get().isLoaded(SHIELD_EXPANSION_ID) && tab == CreativeModeTabs.COMBAT) { + putAfter(event, ItemsInit.NETHERITE_SHIELD.get(), OItems.ELECTRUM_SHIELD); + } // TODO enable again after mod is ported to 1.21.1 // if (ModList.get().isLoaded(NETHERS_DELIGHT_ID) && (tab.location().equals(ND_TAB) || tab == CreativeModeTabs.TOOLS_AND_UTILITIES)) { diff --git a/src/main/java/galena/oreganized/Oreganized.java b/src/main/java/galena/oreganized/Oreganized.java index cc2690a4..b930e99e 100644 --- a/src/main/java/galena/oreganized/Oreganized.java +++ b/src/main/java/galena/oreganized/Oreganized.java @@ -1,6 +1,5 @@ package galena.oreganized; - import com.mojang.serialization.MapCodec; import com.teamabnormals.blueprint.common.dispenser.FishBucketDispenseItemBehavior; import com.teamabnormals.blueprint.core.util.DataUtil; @@ -10,6 +9,7 @@ import galena.oreganized.content.block.LeadOreBlock; import galena.oreganized.content.block.MoltenLeadCauldronBlock; import galena.oreganized.index.OArmorMaterials; +import galena.oreganized.index.OAttachmentTypes; import galena.oreganized.index.OAttributes; import galena.oreganized.index.OBlockEntities; import galena.oreganized.index.OBlocks; @@ -98,6 +98,7 @@ public Oreganized(IEventBus modBus, ModContainer container) { OCriteriaTriggers.register(modBus); OSoundEvents.register(); ORecipeTypes.register(modBus); + OAttachmentTypes.register(modBus); REGISTRY_HELPER.register(modBus); diff --git a/src/main/java/galena/oreganized/client/OreganizedClient.java b/src/main/java/galena/oreganized/client/OreganizedClient.java index 26dec8df..aab94611 100644 --- a/src/main/java/galena/oreganized/client/OreganizedClient.java +++ b/src/main/java/galena/oreganized/client/OreganizedClient.java @@ -12,10 +12,14 @@ import galena.oreganized.client.tooltips.ClientThermometerTooltip; import galena.oreganized.client.tooltips.DeviceTooltip; import galena.oreganized.client.tooltips.ThermometerTooltip; +import galena.oreganized.content.block.PushableBlockEntity; import galena.oreganized.content.item.SpeedometerItem; import galena.oreganized.content.item.ThermometerItem; -import galena.oreganized.index.*; -import galena.oreganized.world.IDoorProgressHolder; +import galena.oreganized.index.OBlocks; +import galena.oreganized.index.ODataComponents; +import galena.oreganized.index.OEntityTypes; +import galena.oreganized.index.OFluids; +import galena.oreganized.index.OItems; import galena.oreganized.world.IMotionHolder; import java.util.List; import java.util.function.Supplier; @@ -31,7 +35,6 @@ import net.minecraft.network.chat.MutableComponent; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; -import net.minecraft.world.InteractionHand; import net.minecraft.world.entity.HumanoidArm; import net.minecraft.world.item.Items; import net.minecraft.world.item.component.ChargedProjectiles; @@ -48,7 +51,7 @@ import net.neoforged.neoforge.client.gui.VanillaGuiLayers; import net.neoforged.neoforge.event.entity.player.ItemTooltipEvent; -@EventBusSubscriber(modid = Oreganized.MOD_ID, value = Dist.CLIENT, bus = EventBusSubscriber.Bus.MOD) +@EventBusSubscriber(modid = Oreganized.MOD_ID, value = Dist.CLIENT) public class OreganizedClient { private static void render(Supplier block, RenderType render) { @@ -124,7 +127,7 @@ public static void registerGuiOverlays(RegisterGuiLayersEvent event) { } public static void renderThirdPersonArm(ModelPart arm, boolean rightArm) { - arm.xRot = -1.7F; + arm.xRot = -1.0F; arm.yRot = rightArm ? -0.1F : 0.2F; } @@ -158,34 +161,37 @@ public static void addTooltips(ItemTooltipEvent event) { @SubscribeEvent public static void renderHand(RenderHandEvent event) { var player = Minecraft.getInstance().player; - //TODO: might want to use attachments here instead - if (!(player instanceof IDoorProgressHolder progressHolder)) return; - var progress = progressHolder.oreganised$getOpeningProgress(); - if (progress == 0) return; - if (event.getHand() == InteractionHand.OFF_HAND) return; - var poseStack = event.getPoseStack(); - - poseStack.pushPose(); - - //TODO: also would be nice if the hand was slightly animate to indicate opening progress - var rightArm = player.getMainArm() == HumanoidArm.RIGHT; - float factor = rightArm ? 1.0F : -1.0F; - poseStack.translate(factor * 0.84000005F, -0.4F, -0.4F); - poseStack.mulPose(Axis.YP.rotationDegrees(factor * -20F - event.getSwingProgress())); - poseStack.mulPose(Axis.ZP.rotationDegrees(factor * 45F)); - poseStack.mulPose(Axis.XP.rotationDegrees(-45F)); + if (!PushableBlockEntity.isPushing(player)) return; + if (player.isInvisible()) return; - var renderer = (PlayerRenderer) Minecraft.getInstance().getEntityRenderDispatcher().getRenderer(player); + var poseStack = event.getPoseStack(); - if (rightArm) { - renderer.renderRightHand(poseStack, event.getMultiBufferSource(), event.getPackedLight(), player); - } else { - renderer.renderLeftHand(poseStack, event.getMultiBufferSource(), event.getPackedLight(), player); + for (var arm : HumanoidArm.values()) { + poseStack.pushPose(); + boolean rightArm = arm == HumanoidArm.RIGHT; + float factor = rightArm ? 1.0F : -1.0F; + poseStack.translate(factor * 0.84000005F, -0.4F, -0.4F); + poseStack.mulPose(Axis.YP.rotationDegrees(factor * -20F - event.getSwingProgress())); + poseStack.mulPose(Axis.ZP.rotationDegrees(factor * 45F)); + poseStack.mulPose(Axis.XP.rotationDegrees(-45F)); + + float time = player.tickCount + event.getPartialTick(); + float movement = Mth.sin(time * 0.1F) * 0.008F; + float rotation = factor * (float) Math.toDegrees(Mth.cos(time * 0.09F) * -0.005); + poseStack.translate(factor * movement, 0, movement); + poseStack.mulPose(Axis.ZP.rotationDegrees(rotation)); + + var renderer = (PlayerRenderer) Minecraft.getInstance().getEntityRenderDispatcher().getRenderer(player); + + if (rightArm) { + renderer.renderRightHand(poseStack, event.getMultiBufferSource(), event.getPackedLight(), player); + } else { + renderer.renderLeftHand(poseStack, event.getMultiBufferSource(), event.getPackedLight(), player); + } + poseStack.popPose(); } - poseStack.popPose(); - event.setCanceled(true); } diff --git a/src/main/java/galena/oreganized/content/block/HeavyDoorBlockEntity.java b/src/main/java/galena/oreganized/content/block/HeavyDoorBlockEntity.java deleted file mode 100644 index 9de171c9..00000000 --- a/src/main/java/galena/oreganized/content/block/HeavyDoorBlockEntity.java +++ /dev/null @@ -1,126 +0,0 @@ -package galena.oreganized.content.block; - -import static galena.oreganized.content.block.LeadDoorBlock.ANIMATED; -import static net.minecraft.world.level.block.state.properties.BlockStateProperties.OPEN; - -import galena.oreganized.index.OBlockEntities; -import galena.oreganized.index.OBlocks; -import galena.oreganized.index.ODamageSources; -import galena.oreganized.world.IDoorProgressHolder; -import java.util.Optional; -import net.minecraft.core.BlockPos; -import net.minecraft.core.HolderLookup; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.world.ItemInteractionResult; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.Level; -import net.minecraft.world.level.LevelAccessor; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.entity.BlockEntityTicker; -import net.minecraft.world.level.block.entity.BlockEntityType; -import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.block.state.properties.BlockSetType; -import net.minecraft.world.level.gameevent.GameEvent; -import org.jetbrains.annotations.Nullable; - -public class HeavyDoorBlockEntity extends BlockEntity { - - private int pressure = 0; - - private final BlockSetType set = OBlocks.LEAD_BLOCK_SET; - - private static final int REQUIRED_PRESSURE_OPEN = 20; - - public HeavyDoorBlockEntity(BlockPos pos, BlockState state) { - super(OBlockEntities.HEAVY_DOOR.get(), pos, state); - } - - public static Optional getAt(LevelAccessor level, BlockPos pos) { - var be = level.getBlockEntity(pos); - if (be instanceof HeavyDoorBlockEntity door) return Optional.of(door); - return Optional.empty(); - } - - @SuppressWarnings("unchecked") - public static @Nullable BlockEntityTicker getTicker(Level level, BlockState state, BlockEntityType type) { - if (type == OBlockEntities.HEAVY_DOOR.get()) { - BlockEntityTicker ticker = (l, p, s, be) -> be.tick(s, l, p); - return (BlockEntityTicker) ticker; - } - - return null; - } - - public void tick(BlockState state, Level level, BlockPos pos) { - if (pressure <= 0) return; - - pressure--; - - if (pressure == 0) { - if (state.getValue(OPEN)) { - state = state.setValue(OPEN, false); - level.setBlock(pos, state, 10); - level.gameEvent(GameEvent.BLOCK_CLOSE, pos, GameEvent.Context.of(state)); - if (state.getBlock() instanceof IHeavyDoor heavy) heavy.sound(null, level, pos, false); - } - - stopUsing(state, level, pos, null); - } else if (pressure < (REQUIRED_PRESSURE_OPEN - 5)) { - setAnimationState(level, pos, state, true); - } - } - - private void setAnimationState(Level level, BlockPos pos, BlockState state, boolean animationState) { - if (state.hasProperty(ANIMATED) && state.getValue(ANIMATED) != animationState) { - level.setBlockAndUpdate(pos, state.setValue(ANIMATED, animationState)); - } - } - - private void stopUsing(BlockState state, Level level, BlockPos pos, @Nullable Player player) { - setAnimationState(level, pos, state, false); - } - - @Override - protected void saveAdditional(CompoundTag nbt, HolderLookup.Provider lookup) { - super.saveAdditional(nbt, lookup); - nbt.putInt("Pressure", pressure); - } - - @Override - public void loadAdditional(CompoundTag nbt, HolderLookup.Provider lookup) { - super.loadAdditional(nbt, lookup); - if(nbt.contains("Pressure", 99)) pressure = nbt.getInt("Pressure"); - } - - public ItemInteractionResult use(BlockState state, Level level, BlockPos pos, Player player) { - var progressHolder = (IDoorProgressHolder) player; - progressHolder.oreganised$incrementOpeningProgress(); - - if (state.getBlock() instanceof IMeltableBlock meltable) { - var goopyness = meltable.getGoopyness(state); - if (goopyness > 0) { - player.hurt(level.damageSources().source(ODamageSources.MOLTEN_LEAD), 1F); - } - if (goopyness > 1) return ItemInteractionResult.FAIL; - } - - if (pressure == 0) { - setAnimationState(level, pos, state, true); - } - - if (pressure < REQUIRED_PRESSURE_OPEN) { - pressure += 6; - } - - if (pressure > REQUIRED_PRESSURE_OPEN && !state.getValue(OPEN)) { - state = state.setValue(OPEN, true); - level.setBlock(pos, state, 10); - level.gameEvent(GameEvent.BLOCK_OPEN, pos, GameEvent.Context.of(state)); - if (state.getBlock() instanceof IHeavyDoor heavy) heavy.sound(player, level, pos, true); - stopUsing(state, level, pos, player); - } - - return ItemInteractionResult.FAIL; - } - -} diff --git a/src/main/java/galena/oreganized/content/block/IHeavyDoor.java b/src/main/java/galena/oreganized/content/block/IHeavyDoor.java deleted file mode 100644 index 982d42df..00000000 --- a/src/main/java/galena/oreganized/content/block/IHeavyDoor.java +++ /dev/null @@ -1,12 +0,0 @@ -package galena.oreganized.content.block; - -import net.minecraft.core.BlockPos; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.level.Level; -import org.jetbrains.annotations.Nullable; - -public interface IHeavyDoor { - - void sound(@Nullable Player player, Level level, BlockPos pos, boolean open); - -} diff --git a/src/main/java/galena/oreganized/content/block/IPushableBlock.java b/src/main/java/galena/oreganized/content/block/IPushableBlock.java new file mode 100644 index 00000000..57d107f0 --- /dev/null +++ b/src/main/java/galena/oreganized/content/block/IPushableBlock.java @@ -0,0 +1,38 @@ +package galena.oreganized.content.block; + +import galena.oreganized.index.OBlockEntities; +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.EntityBlock; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.entity.BlockEntityTicker; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.level.block.state.BlockState; +import org.jetbrains.annotations.Nullable; + +public interface IPushableBlock extends EntityBlock { + + void onFullyPushed(Player player, Level level, BlockPos pos, BlockState state); + + default void reset(Level level, BlockPos pos, BlockState state) {} + + default boolean isToggleable(BlockState state) { + return false; + } + + @Override + @Nullable + default BlockEntity newBlockEntity(BlockPos pos, BlockState state) { + return new PushableBlockEntity(pos, state); + } + + @Override + @Nullable + default BlockEntityTicker getTicker(Level level, BlockState state, BlockEntityType type) { + if (type == OBlockEntities.PUSHABLE.get()) { + return (l, p, s, be) -> ((PushableBlockEntity) be).tick(l, p, s); + } + return null; + } +} diff --git a/src/main/java/galena/oreganized/content/block/LeadDoorBlock.java b/src/main/java/galena/oreganized/content/block/LeadDoorBlock.java index 5a06f665..f8d55b8b 100644 --- a/src/main/java/galena/oreganized/content/block/LeadDoorBlock.java +++ b/src/main/java/galena/oreganized/content/block/LeadDoorBlock.java @@ -2,6 +2,7 @@ import galena.oreganized.index.OBlocks; import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; import net.minecraft.server.level.ServerLevel; import net.minecraft.util.RandomSource; import net.minecraft.world.InteractionHand; @@ -14,45 +15,31 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.DoorBlock; -import net.minecraft.world.level.block.EntityBlock; import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.entity.BlockEntityTicker; -import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; -import net.minecraft.world.level.block.state.properties.BooleanProperty; import net.minecraft.world.level.block.state.properties.DoubleBlockHalf; +import net.minecraft.world.level.gameevent.GameEvent; import net.minecraft.world.phys.BlockHitResult; import org.jetbrains.annotations.Nullable; -public class LeadDoorBlock extends DoorBlock implements IMeltableBlock, EntityBlock, IHeavyDoor { - - /** - * Not fully implemented yet - */ - public static final BooleanProperty ANIMATED = BooleanProperty.create("animated"); - +public class LeadDoorBlock extends DoorBlock implements IMeltableBlock, IPushableBlock { public LeadDoorBlock(Properties properties) { super(OBlocks.LEAD_BLOCK_SET, properties); - //registerDefaultState(defaultBlockState().setValue(ANIMATED, false)); } @Override public @Nullable BlockEntity newBlockEntity(BlockPos pos, BlockState state) { - if (state.getValue(HALF) == DoubleBlockHalf.UPPER) return null; - return new HeavyDoorBlockEntity(pos, state); - } - - @Override - public @Nullable BlockEntityTicker getTicker(Level level, BlockState state, BlockEntityType type) { - return HeavyDoorBlockEntity.getTicker(level, state, type); + return state.getValue(HALF) == DoubleBlockHalf.LOWER + ? IPushableBlock.super.newBlockEntity(pos, state) + : null; } @Override protected ItemInteractionResult useItemOn(ItemStack stack, BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) { var controller = state.getValue(HALF) == DoubleBlockHalf.UPPER ? pos.below() : pos; - return HeavyDoorBlockEntity.getAt(level, controller) + return PushableBlockEntity.getAt(level, controller) .map(it -> it.use(state, level, pos, player)) .orElse(ItemInteractionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION); } @@ -61,7 +48,6 @@ protected ItemInteractionResult useItemOn(ItemStack stack, BlockState state, Lev protected void createBlockStateDefinition(StateDefinition.Builder builder) { super.createBlockStateDefinition(builder); builder.add(getGoopynessProperty()); - //builder.add(ANIMATED); } @Override @@ -81,28 +67,13 @@ public int getInducedGoopyness(BlockGetter world, BlockState state, BlockPos pos if (state.is(this)) { var selfHalf = selfState.getValue(HALF); if (selfHalf == DoubleBlockHalf.UPPER && pos.getY() < selfPos.getY() - || selfHalf == DoubleBlockHalf.LOWER && pos.getY() > selfPos.getY() - ) { + || selfHalf == DoubleBlockHalf.LOWER && pos.getY() > selfPos.getY()) { return 0; } } return IMeltableBlock.super.getInducedGoopyness(world, state, pos, selfState, selfPos); } - /* - Only required for `ANIMATABLE` property - - @Override - public BlockState updateShape(BlockState state, Direction direction, BlockState changedState, LevelAccessor level, BlockPos pos, BlockPos changedPos) { - var updated = super.updateShape(state, direction, changedState, level, pos, changedPos); - var half = state.getValue(HALF); - if (changedState.is(this) && ((direction == Direction.UP && half == DoubleBlockHalf.LOWER) || (direction == Direction.DOWN && half == DoubleBlockHalf.UPPER))) { - return updated.setValue(ANIMATED, changedState.getValue(ANIMATED)); - } - return updated; - } - */ - @Override public void tick(BlockState state, ServerLevel world, BlockPos pos, RandomSource random) { tickMelting(state, world, pos, random); @@ -117,11 +88,17 @@ public void stepOn(Level world, BlockPos pos, BlockState state, Entity entity) { @Override public void neighborChanged(BlockState state, Level level, BlockPos pos, Block block, BlockPos fromPos, boolean isMoving) { scheduleUpdate(level, pos, block); + boolean flag = level.hasNeighborSignal(pos) || level.hasNeighborSignal(pos.relative(state.getValue(HALF) == DoubleBlockHalf.LOWER ? Direction.UP : Direction.DOWN)); + if (!defaultBlockState().is(block) && flag != state.getValue(POWERED)) { + level.setBlock(pos, state.setValue(POWERED, flag), UPDATE_CLIENTS); + } } @Override public @Nullable BlockState getStateForPlacement(BlockPlaceContext context) { - return super.getStateForPlacement(context).setValue(POWERED, false); + var state = super.getStateForPlacement(context); + if (state == null) return null; + return state.setValue(OPEN, false); } @Override @@ -131,7 +108,24 @@ public void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldS } @Override - public void sound(@Nullable Player player, Level level, BlockPos pos, boolean open) { - playSound(player, level, pos, open); + public void onFullyPushed(Player player, Level level, BlockPos pos, BlockState state) { + boolean isOpen = state.getValue(OPEN); + if (isOpen && !isToggleable(state)) return; + + level.setBlock(pos, state.setValue(OPEN, !isOpen), UPDATE_CLIENTS | UPDATE_IMMEDIATE); + playSound(null, level, pos, !isOpen); + level.gameEvent(player, !isOpen ? GameEvent.BLOCK_OPEN : GameEvent.BLOCK_CLOSE, pos); + } + + @Override + public void reset(Level level, BlockPos pos, BlockState state) { + if (!state.getValue(OPEN)) return; + + setOpen(null, level, state, pos, false); + } + + @Override + public boolean isToggleable(BlockState state) { + return state.getValue(POWERED); } } diff --git a/src/main/java/galena/oreganized/content/block/LeadTrapdoorBlock.java b/src/main/java/galena/oreganized/content/block/LeadTrapdoorBlock.java index cb608bf6..e8a9261d 100644 --- a/src/main/java/galena/oreganized/content/block/LeadTrapdoorBlock.java +++ b/src/main/java/galena/oreganized/content/block/LeadTrapdoorBlock.java @@ -3,6 +3,7 @@ import galena.oreganized.index.OBlocks; import net.minecraft.core.BlockPos; import net.minecraft.server.level.ServerLevel; +import net.minecraft.sounds.SoundSource; import net.minecraft.util.RandomSource; import net.minecraft.world.InteractionHand; import net.minecraft.world.ItemInteractionResult; @@ -12,35 +13,21 @@ import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; -import net.minecraft.world.level.block.EntityBlock; import net.minecraft.world.level.block.TrapDoorBlock; -import net.minecraft.world.level.block.entity.BlockEntity; -import net.minecraft.world.level.block.entity.BlockEntityTicker; -import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.gameevent.GameEvent; import net.minecraft.world.phys.BlockHitResult; -import org.jetbrains.annotations.Nullable; -public class LeadTrapdoorBlock extends TrapDoorBlock implements IMeltableBlock, EntityBlock, IHeavyDoor { +public class LeadTrapdoorBlock extends TrapDoorBlock implements IMeltableBlock, IPushableBlock { public LeadTrapdoorBlock(Properties properties) { super(OBlocks.LEAD_BLOCK_SET, properties); } - @Override - public @Nullable BlockEntity newBlockEntity(BlockPos pos, BlockState state) { - return new HeavyDoorBlockEntity(pos, state); - } - - @Override - public @Nullable BlockEntityTicker getTicker(Level level, BlockState state, BlockEntityType type) { - return HeavyDoorBlockEntity.getTicker(level, state, type); - } - @Override protected ItemInteractionResult useItemOn(ItemStack stack, BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) { - return HeavyDoorBlockEntity.getAt(level, pos) + return PushableBlockEntity.getAt(level, pos) .map(it -> it.use(state, level, pos, player)) .orElse(ItemInteractionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION); } @@ -68,8 +55,8 @@ public void neighborChanged(BlockState state, Level level, BlockPos pos, Block b } @Override - public @Nullable BlockState getStateForPlacement(BlockPlaceContext context) { - return super.getStateForPlacement(context).setValue(POWERED, false); + public BlockState getStateForPlacement(BlockPlaceContext context) { + return super.getStateForPlacement(context).setValue(OPEN, false); } @Override @@ -79,7 +66,33 @@ public void onPlace(BlockState state, Level level, BlockPos pos, BlockState oldS } @Override - public void sound(@Nullable Player player, Level level, BlockPos pos, boolean open) { - playSound(player, level, pos, open); + public void onFullyPushed(Player player, Level level, BlockPos pos, BlockState state) { + boolean isOpen = state.getValue(OPEN); + if (isOpen && !isToggleable(state)) return; + + level.setBlock(pos, state.setValue(OPEN, !isOpen), UPDATE_CLIENTS); + level.playSound( + null, pos, + isOpen ? getType().trapdoorClose() : getType().trapdoorOpen(), + SoundSource.BLOCKS, + 1.0F, + level.getRandom().nextFloat() * 0.1F + 0.9F + ); + level.gameEvent(player, !isOpen ? GameEvent.BLOCK_OPEN : GameEvent.BLOCK_CLOSE, pos); + } + + @Override + public void reset(Level level, BlockPos pos, BlockState state) { + if (!state.getValue(OPEN)) return; + + state = state.setValue(OPEN, false); + level.setBlock(pos, state, UPDATE_CLIENTS); + // Not calling level.gameEvent here because TrapDoorBlock's playSound already does that + playSound(null, level, pos, false); + } + + @Override + public boolean isToggleable(BlockState state) { + return state.getValue(POWERED); } } diff --git a/src/main/java/galena/oreganized/content/block/PushableBlockEntity.java b/src/main/java/galena/oreganized/content/block/PushableBlockEntity.java new file mode 100644 index 00000000..8994dd5c --- /dev/null +++ b/src/main/java/galena/oreganized/content/block/PushableBlockEntity.java @@ -0,0 +1,153 @@ +package galena.oreganized.content.block; + +import galena.oreganized.index.OAttachmentTypes; +import galena.oreganized.index.OBlockEntities; +import galena.oreganized.index.ODamageSources; +import java.util.Optional; +import java.util.UUID; +import net.minecraft.core.BlockPos; +import net.minecraft.core.HolderLookup; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.game.ClientGamePacketListener; +import net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket; +import net.minecraft.world.ItemInteractionResult; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LevelAccessor; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import org.jetbrains.annotations.Nullable; + +public class PushableBlockEntity extends BlockEntity { + private static final String PRESSURE_NBT_KEY = "Pressure"; + private static final String RESET_TIMER_NBT_KEY = "ResetTimer"; + private static final int REQUIRED_PRESSURE = 16; + private static final int RESET_TIME = REQUIRED_PRESSURE; + private int pressure = 0; + private int resetTimer = 0; + private long lastInteractionTime = 0; + private UUID lastInteractingPlayerUUID = null; + + public PushableBlockEntity(BlockPos pos, BlockState state) { + super(OBlockEntities.PUSHABLE.get(), pos, state); + } + + public static Optional getAt(LevelAccessor level, BlockPos pos) { + if (level.getBlockEntity(pos) instanceof PushableBlockEntity blockEntity) { + return Optional.of(blockEntity); + } + return Optional.empty(); + } + + public static boolean isPushing(Entity entity) { + if (!(entity instanceof Player player)) { + return false; + } + return player.level().getGameTime() - player.getData(OAttachmentTypes.LAST_PUSH_TIME.get()) < 2; + } + + public void tick(Level level, BlockPos pos, BlockState state) { + if (!(state.getBlock() instanceof IPushableBlock pushable)) return; + + if (lastInteractingPlayerUUID != null) { + Player player = level.getPlayerByUUID(lastInteractingPlayerUUID); + boolean pushing = level.getGameTime() - lastInteractionTime < 5; + if (player != null && pushing && !player.swinging) { + player.setData(OAttachmentTypes.LAST_PUSH_TIME.get(), level.getGameTime()); + if (!player.hasEffect(MobEffects.WEAKNESS)) { + if (pressure < REQUIRED_PRESSURE) { + pressure++; + setChanged(); + } + if (resetTimer < RESET_TIME) { + resetTimer++; + setChanged(); + } + } + return; + } + } + + if (!pushable.isToggleable(state) && resetTimer > 0) { + resetTimer--; + setChanged(); + if (resetTimer <= 0) { + pushable.reset(level, pos, state); + level.sendBlockUpdated(pos, state, state, Block.UPDATE_CLIENTS); + } + } + if (pressure != 0) { + pressure = 0; + setChanged(); + } + } + + @Override + protected void saveAdditional(CompoundTag nbt, HolderLookup.Provider lookup) { + super.saveAdditional(nbt, lookup); + nbt.putInt(PRESSURE_NBT_KEY, pressure); + nbt.putInt(RESET_TIMER_NBT_KEY, resetTimer); + } + + @Override + public void loadAdditional(CompoundTag nbt, HolderLookup.Provider lookup) { + super.loadAdditional(nbt, lookup); + if (nbt.contains(PRESSURE_NBT_KEY, 99)) { + pressure = nbt.getInt(PRESSURE_NBT_KEY); + } + if (nbt.contains(RESET_TIMER_NBT_KEY, 99)) { + resetTimer = nbt.getInt(RESET_TIMER_NBT_KEY); + } + } + + @Override + public @Nullable Packet getUpdatePacket() { + return ClientboundBlockEntityDataPacket.create(this); + } + + @Override + public CompoundTag getUpdateTag(HolderLookup.Provider registries) { + var nbt = super.getUpdateTag(registries); + nbt.putInt(PRESSURE_NBT_KEY, pressure); + nbt.putInt(RESET_TIMER_NBT_KEY, resetTimer); + return nbt; + } + + public ItemInteractionResult use(BlockState state, Level level, BlockPos pos, Player player) { + if (state.getBlock() instanceof IMeltableBlock meltable) { + int goopyness = meltable.getGoopyness(state); + if (goopyness > 0) { + player.hurt(level.damageSources().source(ODamageSources.MOLTEN_LEAD), 1F); + if (goopyness > 1) { + return ItemInteractionResult.sidedSuccess(level.isClientSide()); + } + } + } + + if (!player.swinging) { + lastInteractionTime = level.getGameTime(); + } + + level.sendBlockUpdated(pos, state, state, Block.UPDATE_CLIENTS); + + int offset = level.isClientSide() ? 1 : 0; + if (player.hasEffect(MobEffects.DAMAGE_BOOST) + || pressure >= REQUIRED_PRESSURE - offset && player.getUUID().equals(lastInteractingPlayerUUID)) { + var pushable = (IPushableBlock) state.getBlock(); + pushable.onFullyPushed(player, level, pos, state); + pressure = 0; + resetTimer = RESET_TIME; + setChanged(); + level.sendBlockUpdated(pos, state, state, Block.UPDATE_CLIENTS); + if (player.hasEffect(MobEffects.DAMAGE_BOOST) || pushable.isToggleable(state)) { + return ItemInteractionResult.sidedSuccess(level.isClientSide()); + } + } + lastInteractingPlayerUUID = player.getUUID(); + return ItemInteractionResult.CONSUME; + } +} diff --git a/src/main/java/galena/oreganized/content/block/SilverDoorBlock.java b/src/main/java/galena/oreganized/content/block/SilverDoorBlock.java index 184c1d37..ebeec230 100644 --- a/src/main/java/galena/oreganized/content/block/SilverDoorBlock.java +++ b/src/main/java/galena/oreganized/content/block/SilverDoorBlock.java @@ -34,7 +34,9 @@ protected void onExplosionHit(BlockState state, Level level, BlockPos pos, Explo @Override public BlockState getStateForPlacement(BlockPlaceContext context) { - return super.getStateForPlacement(context).setValue(OPEN, false); + var state = super.getStateForPlacement(context); + if (state == null) return null; + return state.setValue(OPEN, false); } @Override @@ -42,7 +44,7 @@ protected InteractionResult useWithoutItem(BlockState state, Level level, BlockP if (state.getValue(POWERED)) { state = state.cycle(OPEN); level.setBlock(pos, state, 10); - playSound(player, level, pos, state.getValue(OPEN)); + playSound(player, level, pos, state.getValue(OPEN)); level.gameEvent(player, isOpen(state) ? GameEvent.BLOCK_OPEN : GameEvent.BLOCK_CLOSE, pos); return InteractionResult.sidedSuccess(level.isClientSide); } diff --git a/src/main/java/galena/oreganized/content/block/SturdyButtonBlock.java b/src/main/java/galena/oreganized/content/block/SturdyButtonBlock.java new file mode 100644 index 00000000..276fa6a0 --- /dev/null +++ b/src/main/java/galena/oreganized/content/block/SturdyButtonBlock.java @@ -0,0 +1,139 @@ +package galena.oreganized.content.block; + +import galena.oreganized.index.OBlocks; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.ItemInteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.ButtonBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.gameevent.GameEvent; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; +import org.jetbrains.annotations.Nullable; + +public class SturdyButtonBlock extends ButtonBlock implements IMeltableBlock, IPushableBlock { + protected static final int PRESSED_DEPTH = 2; + protected static final int UNPRESSED_DEPTH = 4; + protected static final int HALF_AABB_HEIGHT = 4; + protected static final int HALF_AABB_WIDTH = 4; + protected static final VoxelShape CEILING_AABB = Block.box( + 8.0 - HALF_AABB_HEIGHT, 16.0 - UNPRESSED_DEPTH, 8.0 - HALF_AABB_WIDTH, + 8.0 + HALF_AABB_HEIGHT, 16.0, 8.0 + HALF_AABB_WIDTH); + protected static final VoxelShape FLOOR_AABB = Block.box( + 8.0 - HALF_AABB_HEIGHT, 0, 8.0 - HALF_AABB_WIDTH, + 8.0 + HALF_AABB_HEIGHT, UNPRESSED_DEPTH, 8.0 + HALF_AABB_WIDTH); + protected static final VoxelShape NORTH_AABB = Block.box( + 8.0 - HALF_AABB_WIDTH, 8.0 - HALF_AABB_HEIGHT, 16.0 - UNPRESSED_DEPTH, + 8.0 + HALF_AABB_WIDTH, 8.0 + HALF_AABB_HEIGHT, 16.0); + protected static final VoxelShape SOUTH_AABB = Block.box( + 8.0 - HALF_AABB_WIDTH, 8.0 - HALF_AABB_HEIGHT, 0, + 8.0 + HALF_AABB_WIDTH, 8.0 + HALF_AABB_HEIGHT, UNPRESSED_DEPTH); + protected static final VoxelShape WEST_AABB = Block.box( + 16.0 - UNPRESSED_DEPTH, 8.0 - HALF_AABB_HEIGHT, 8.0 - HALF_AABB_WIDTH, + 16.0, 8.0 + HALF_AABB_HEIGHT, 8.0 + HALF_AABB_WIDTH); + protected static final VoxelShape EAST_AABB = Block.box( + 0, 8.0 - HALF_AABB_HEIGHT, 8.0 - HALF_AABB_WIDTH, + UNPRESSED_DEPTH, 8.0 + HALF_AABB_HEIGHT, 8.0 + HALF_AABB_WIDTH); + protected static final VoxelShape PRESSED_CEILING_AABB = Block.box( + 8.0 - HALF_AABB_HEIGHT, 16.0 - PRESSED_DEPTH, 8.0 - HALF_AABB_WIDTH, + 8.0 + HALF_AABB_HEIGHT, 16.0, 8.0 + HALF_AABB_WIDTH); + protected static final VoxelShape PRESSED_FLOOR_AABB = Block.box( + 8.0 - HALF_AABB_HEIGHT, 0, 8.0 - HALF_AABB_WIDTH, + 8.0 + HALF_AABB_HEIGHT, PRESSED_DEPTH, 8.0 + HALF_AABB_WIDTH); + protected static final VoxelShape PRESSED_NORTH_AABB = Block.box( + 8.0 - HALF_AABB_WIDTH, 8.0 - HALF_AABB_HEIGHT, 16.0 - PRESSED_DEPTH, + 8.0 + HALF_AABB_WIDTH, 8.0 + HALF_AABB_HEIGHT, 16.0); + protected static final VoxelShape PRESSED_SOUTH_AABB = Block.box( + 8.0 - HALF_AABB_WIDTH, 8.0 - HALF_AABB_HEIGHT, 0, + 8.0 + HALF_AABB_WIDTH, 8.0 + HALF_AABB_HEIGHT, PRESSED_DEPTH); + protected static final VoxelShape PRESSED_WEST_AABB = Block.box( + 16.0 - PRESSED_DEPTH, 8.0 - HALF_AABB_HEIGHT, 8.0 - HALF_AABB_WIDTH, + 16.0, 8.0 + HALF_AABB_HEIGHT, 8.0 + HALF_AABB_WIDTH); + protected static final VoxelShape PRESSED_EAST_AABB = Block.box( + 0, 8.0 - HALF_AABB_HEIGHT, 8.0 - HALF_AABB_WIDTH, + PRESSED_DEPTH, 8.0 + HALF_AABB_HEIGHT, 8.0 + HALF_AABB_WIDTH); + + public SturdyButtonBlock(Properties properties) { + super(OBlocks.LEAD_BLOCK_SET, 30, properties); + } + + @Override + protected VoxelShape getShape(BlockState state, BlockGetter blockGetter, BlockPos pos, CollisionContext context) { + Direction direction = state.getValue(FACING); + boolean flag = state.getValue(POWERED); + return switch (state.getValue(FACE)) { + case FLOOR -> flag ? PRESSED_FLOOR_AABB : FLOOR_AABB; + case WALL -> switch (direction) { + case EAST -> flag ? PRESSED_EAST_AABB : EAST_AABB; + case WEST -> flag ? PRESSED_WEST_AABB : WEST_AABB; + case SOUTH -> flag ? PRESSED_SOUTH_AABB : SOUTH_AABB; + case NORTH, UP, DOWN -> flag ? PRESSED_NORTH_AABB : NORTH_AABB; + }; + default -> flag ? PRESSED_CEILING_AABB : CEILING_AABB; + }; + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + super.createBlockStateDefinition(builder); + builder.add(getGoopynessProperty()); + } + + @Override + public @Nullable BlockState getStateForPlacement(BlockPlaceContext context) { + var state = super.getStateForPlacement(context); + if (state == null) return null; + var connectedState = context.getLevel().getBlockState(context.getClickedPos().relative(getConnectedDirection(state).getOpposite())); + if (connectedState.hasProperty(getGoopynessProperty())) { + return state.setValue(getGoopynessProperty(), connectedState.getValue(getGoopynessProperty())); + } + return state; + } + + @Override + protected void neighborChanged(BlockState state, Level level, BlockPos pos, Block block, BlockPos fromPos, boolean isMoving) { + BlockState connectedState = level.getBlockState(pos.relative(getConnectedDirection(state).getOpposite())); + if (connectedState.hasProperty(getGoopynessProperty())) { + level.setBlock(pos, state.setValue(getGoopynessProperty(), connectedState.getValue(getGoopynessProperty())), 2); + } + super.neighborChanged(state, level, pos, block, fromPos, isMoving); + } + + @Override + protected ItemInteractionResult useItemOn(ItemStack stack, BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) { + return PushableBlockEntity.getAt(level, pos) + .map(it -> it.use(state, level, pos, player)) + .orElse(ItemInteractionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION); + } + + @Override + public void onFullyPushed(Player player, Level level, BlockPos pos, BlockState state) { + if (state.getValue(POWERED)) return; + + state = state.setValue(POWERED, true); + level.setBlock(pos, state, UPDATE_ALL); + updateNeighbours(state, level, pos); + level.gameEvent(player, GameEvent.BLOCK_ACTIVATE, pos); + playSound(null, level, pos, true); + } + + @Override + public void reset(Level level, BlockPos pos, BlockState state) { + if (!state.getValue(POWERED)) return; + + state = state.setValue(POWERED, false); + level.setBlock(pos, state, UPDATE_ALL); + updateNeighbours(state, level, pos); + level.gameEvent(null, GameEvent.BLOCK_DEACTIVATE, pos); + playSound(null, level, pos, false); + } +} diff --git a/src/main/java/galena/oreganized/content/block/SturdyLeverBlock.java b/src/main/java/galena/oreganized/content/block/SturdyLeverBlock.java new file mode 100644 index 00000000..58efbcf5 --- /dev/null +++ b/src/main/java/galena/oreganized/content/block/SturdyLeverBlock.java @@ -0,0 +1,122 @@ +package galena.oreganized.content.block; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.ItemInteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.BlockGetter; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.LeverBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition; +import net.minecraft.world.level.gameevent.GameEvent; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.shapes.CollisionContext; +import net.minecraft.world.phys.shapes.VoxelShape; +import org.jetbrains.annotations.Nullable; + +public class SturdyLeverBlock extends LeverBlock implements IMeltableBlock, IPushableBlock { + protected static final int DEPTH = 4; + protected static final int WIDTH = 12; + protected static final int HEIGHT = 12; + protected static final VoxelShape NORTH_AABB = Block.box( + (16 - WIDTH) / 2.0F, (16 - HEIGHT) / 2.0F, 16 - DEPTH, + (16 + WIDTH) / 2.0F, (16 + HEIGHT) / 2.0F, 16.0F); + protected static final VoxelShape SOUTH_AABB = Block.box( + (16 - WIDTH) / 2.0F, (16 - HEIGHT) / 2.0F, 0.0F, + (16 + WIDTH) / 2.0F, (16 + HEIGHT) / 2.0F, DEPTH); + protected static final VoxelShape WEST_AABB = Block.box( + 16 - DEPTH, (16 - HEIGHT) / 2.0F, (16 - WIDTH) / 2.0F, + 16.0F, (16 + HEIGHT) / 2.0F, (16 + WIDTH) / 2.0F); + protected static final VoxelShape EAST_AABB = Block.box( + 0.0F, (16 - HEIGHT) / 2.0F, (16 - WIDTH) / 2.0F, + DEPTH, (16 + HEIGHT) / 2.0F, (16 + WIDTH) / 2.0F); + protected static final VoxelShape UP_AABB_Z = Block.box( + (16 - WIDTH) / 2.0F, 0.0F, (16 - HEIGHT) / 2.0F, + (16 + WIDTH) / 2.0F, DEPTH, (16 + HEIGHT) / 2.0F); + protected static final VoxelShape UP_AABB_X = Block.box( + (16 - HEIGHT) / 2.0F, 0.0F, (16 - WIDTH) / 2.0F, + (16 + HEIGHT) / 2.0F, DEPTH, (16 + WIDTH) / 2.0F); + protected static final VoxelShape DOWN_AABB_Z = Block.box( + (16 - WIDTH) / 2.0F, 16 - DEPTH, (16 - HEIGHT) / 2.0F, + (16 + WIDTH) / 2.0F, 16.0F, (16 + HEIGHT) / 2.0F); + protected static final VoxelShape DOWN_AABB_X = Block.box( + (16 - HEIGHT) / 2.0F, 16 - DEPTH, (16 - WIDTH) / 2.0F, + (16 + HEIGHT) / 2.0F, 16.0F, (16 + WIDTH) / 2.0F); + + public SturdyLeverBlock(Properties properties) { + super(properties); + } + + @Override + protected VoxelShape getShape(BlockState state, BlockGetter level, BlockPos pos, CollisionContext context) { + Direction facing = state.getValue(FACING); + return switch (state.getValue(FACE)) { + case FLOOR -> facing.getAxis() == Direction.Axis.X ? UP_AABB_X : UP_AABB_Z; + case WALL -> switch (facing) { + case EAST -> EAST_AABB; + case WEST -> WEST_AABB; + case SOUTH -> SOUTH_AABB; + case NORTH, UP, DOWN -> NORTH_AABB; + }; + case CEILING -> facing.getAxis() == Direction.Axis.X ? DOWN_AABB_X : DOWN_AABB_Z; + }; + } + + @Override + protected InteractionResult useWithoutItem(BlockState state, Level level, BlockPos pos, Player player, BlockHitResult hitResult) { + return InteractionResult.FAIL; + } + + @Override + protected void createBlockStateDefinition(StateDefinition.Builder builder) { + super.createBlockStateDefinition(builder); + builder.add(getGoopynessProperty()); + } + + @Override + public @Nullable BlockState getStateForPlacement(BlockPlaceContext context) { + var state = super.getStateForPlacement(context); + if (state == null) return null; + var connectedState = context.getLevel().getBlockState(context.getClickedPos().relative(getConnectedDirection(state).getOpposite())); + if (connectedState.hasProperty(getGoopynessProperty())) { + return state.setValue(getGoopynessProperty(), connectedState.getValue(getGoopynessProperty())); + } + return state; + } + + @Override + protected void neighborChanged(BlockState state, Level level, BlockPos pos, Block block, BlockPos fromPos, boolean isMoving) { + BlockState connectedState = level.getBlockState(pos.relative(getConnectedDirection(state).getOpposite())); + if (connectedState.hasProperty(getGoopynessProperty())) { + level.setBlock(pos, state.setValue(getGoopynessProperty(), connectedState.getValue(getGoopynessProperty())), 2); + } + super.neighborChanged(state, level, pos, block, fromPos, isMoving); + } + + @Override + protected ItemInteractionResult useItemOn(ItemStack stack, BlockState state, Level level, BlockPos pos, Player player, InteractionHand hand, BlockHitResult hit) { + return PushableBlockEntity.getAt(level, pos) + .map(it -> it.use(state, level, pos, player)) + .orElse(ItemInteractionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION); + } + + @Override + public void onFullyPushed(Player player, Level level, BlockPos pos, BlockState state) { + state = state.cycle(POWERED); + level.setBlock(pos, state, 3); + updateNeighbours(state, level, pos); + playSound(null, level, pos, state); + level.gameEvent(player, state.getValue(POWERED) ? GameEvent.BLOCK_ACTIVATE : GameEvent.BLOCK_DEACTIVATE, pos); + } + + @Override + public boolean isToggleable(BlockState state) { + return true; + } +} diff --git a/src/main/java/galena/oreganized/content/effect/StunningEffect.java b/src/main/java/galena/oreganized/content/effect/StunningEffect.java index 979d62bf..2ebd6aa2 100644 --- a/src/main/java/galena/oreganized/content/effect/StunningEffect.java +++ b/src/main/java/galena/oreganized/content/effect/StunningEffect.java @@ -32,7 +32,7 @@ public boolean applyEffectTick(@NotNull LivingEntity entity, int amplifier) { var health = entity.getHealth() / entity.getMaxHealth(); var targetAmplifier = (int) Math.ceil((1.0 - health) * MAX_AMPLIFIER); - if (entity.getHealth() <= 1 && entity instanceof ServerPlayer player) { + if (entity.getHealth() <= 1 && entity.getHealth() > 0 && entity instanceof ServerPlayer player) { OCriteriaTriggers.PROFOUND_BRAIN_DAMAGE.get().trigger(player); } diff --git a/src/main/java/galena/oreganized/index/OAttachmentTypes.java b/src/main/java/galena/oreganized/index/OAttachmentTypes.java new file mode 100644 index 00000000..8d96848c --- /dev/null +++ b/src/main/java/galena/oreganized/index/OAttachmentTypes.java @@ -0,0 +1,20 @@ +package galena.oreganized.index; + +import galena.oreganized.Oreganized; +import net.minecraft.network.codec.ByteBufCodecs; +import net.neoforged.bus.api.IEventBus; +import net.neoforged.neoforge.attachment.AttachmentType; +import net.neoforged.neoforge.registries.DeferredHolder; +import net.neoforged.neoforge.registries.DeferredRegister; +import net.neoforged.neoforge.registries.NeoForgeRegistries; + +public class OAttachmentTypes { + public static final DeferredRegister> ATTACHMENT_TYPES = DeferredRegister.create(NeoForgeRegistries.ATTACHMENT_TYPES, Oreganized.MOD_ID); + + public static final DeferredHolder, AttachmentType> LAST_PUSH_TIME = + ATTACHMENT_TYPES.register("last_push_time", () -> AttachmentType.builder(() -> 0L).sync(ByteBufCodecs.VAR_LONG).build()); + + public static void register(IEventBus modBus) { + ATTACHMENT_TYPES.register(modBus); + } +} diff --git a/src/main/java/galena/oreganized/index/OBlockEntities.java b/src/main/java/galena/oreganized/index/OBlockEntities.java index 866c7215..ae8b0514 100644 --- a/src/main/java/galena/oreganized/index/OBlockEntities.java +++ b/src/main/java/galena/oreganized/index/OBlockEntities.java @@ -2,7 +2,7 @@ import com.teamabnormals.blueprint.core.util.registry.BlockEntitySubRegistryHelper; import galena.oreganized.Oreganized; -import galena.oreganized.content.block.HeavyDoorBlockEntity; +import galena.oreganized.content.block.PushableBlockEntity; import galena.oreganized.content.entity.GargoyleBlockEntity; import java.util.Set; import net.minecraft.world.level.block.entity.BlockEntityType; @@ -12,7 +12,7 @@ public class OBlockEntities { public static final BlockEntitySubRegistryHelper HELPER = Oreganized.REGISTRY_HELPER.getBlockEntitySubHelper(); public static final DeferredHolder, BlockEntityType> GARGOYLE = HELPER.createBlockEntity("gargoyle", GargoyleBlockEntity::new, () -> Set.of(OBlocks.GARGOYLE.get())); - public static final DeferredHolder, BlockEntityType> HEAVY_DOOR = HELPER.createBlockEntity("heavy_door", HeavyDoorBlockEntity::new, () -> Set.of(OBlocks.LEAD_DOOR.get(), OBlocks.LEAD_TRAPDOOR.get())); + public static final DeferredHolder, BlockEntityType> PUSHABLE = HELPER.createBlockEntity("pushable", PushableBlockEntity::new, () -> Set.of(OBlocks.LEAD_DOOR.get(), OBlocks.LEAD_TRAPDOOR.get(), OBlocks.STURDY_LEVER.get(), OBlocks.STURDY_BUTTON.get())); public static void register() { // Load this class diff --git a/src/main/java/galena/oreganized/index/OBlocks.java b/src/main/java/galena/oreganized/index/OBlocks.java index 2638893f..8d668251 100644 --- a/src/main/java/galena/oreganized/index/OBlocks.java +++ b/src/main/java/galena/oreganized/index/OBlocks.java @@ -2,7 +2,25 @@ import com.teamabnormals.blueprint.core.util.registry.BlockSubRegistryHelper; import galena.oreganized.Oreganized; -import galena.oreganized.content.block.*; +import galena.oreganized.content.block.BulbBlock; +import galena.oreganized.content.block.CrystalGlassBlock; +import galena.oreganized.content.block.CrystalGlassPaneBlock; +import galena.oreganized.content.block.GargoyleBlock; +import galena.oreganized.content.block.IMeltableBlock; +import galena.oreganized.content.block.LeadBarsBlock; +import galena.oreganized.content.block.LeadDoorBlock; +import galena.oreganized.content.block.LeadTrapdoorBlock; +import galena.oreganized.content.block.MeltableBlock; +import galena.oreganized.content.block.MeltablePillarBlock; +import galena.oreganized.content.block.MoltenLeadBlock; +import galena.oreganized.content.block.MoltenLeadCauldronBlock; +import galena.oreganized.content.block.ShrapnelBombBlock; +import galena.oreganized.content.block.SilverBulbBlock; +import galena.oreganized.content.block.SilverDoorBlock; +import galena.oreganized.content.block.SilverTrapdoorBlock; +import galena.oreganized.content.block.SpottedGlanceBlock; +import galena.oreganized.content.block.SturdyButtonBlock; +import galena.oreganized.content.block.SturdyLeverBlock; import java.util.Map; import java.util.Objects; import java.util.function.Function; @@ -16,11 +34,24 @@ import net.minecraft.world.item.DoubleHighBlockItem; import net.minecraft.world.item.DyeColor; import net.minecraft.world.item.Item; -import net.minecraft.world.level.block.*; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.DropExperienceBlock; +import net.minecraft.world.level.block.FlowerBlock; +import net.minecraft.world.level.block.FlowerPotBlock; +import net.minecraft.world.level.block.IceBlock; +import net.minecraft.world.level.block.IronBarsBlock; +import net.minecraft.world.level.block.LiquidBlock; +import net.minecraft.world.level.block.RotatedPillarBlock; +import net.minecraft.world.level.block.SlabBlock; +import net.minecraft.world.level.block.SoundType; +import net.minecraft.world.level.block.StairBlock; +import net.minecraft.world.level.block.WallBlock; import net.minecraft.world.level.block.state.BlockBehaviour.Properties; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.properties.BlockSetType; import net.minecraft.world.level.material.MapColor; +import net.minecraft.world.level.material.PushReaction; import net.neoforged.neoforge.registries.DeferredBlock; public class OBlocks { @@ -51,12 +82,12 @@ private static MapColor leadMapColor(BlockState state) { return LEAD_MAP_COLORS[0]; } - var goopyness = Math.min(2, block.getGoopyness(state)); + int goopyness = Math.min(2, block.getGoopyness(state)); return LEAD_MAP_COLORS[goopyness]; } private static Properties leadDecoProperties() { - return leadProperties().noOcclusion().isValidSpawn(($1, $2, $3, $4) -> false); + return leadProperties().noOcclusion().isValidSpawn(Blocks::never); } // Glance @@ -145,14 +176,23 @@ private static Properties silverProperties() { public static final DeferredBlock CUT_LEAD = register("cut_lead", () -> new MeltablePillarBlock(leadProperties())); public static final DeferredBlock LEAD_PILLAR = register("lead_pillar", () -> new MeltablePillarBlock(leadProperties())); - public static final DeferredBlock LEAD_BULB = register("lead_bulb", () -> new BulbBlock(leadProperties().lightLevel(BulbBlock::getLightLevel))); + public static final DeferredBlock LEAD_BULB = register("lead_bulb", () -> new BulbBlock(leadProperties().lightLevel(BulbBlock::getLightLevel))); - public static final BlockSetType LEAD_BLOCK_SET = BlockSetType.register(new BlockSetType("lead", true, false, false, BlockSetType.PressurePlateSensitivity.MOBS, SoundType.METAL, SoundEvents.IRON_DOOR_CLOSE, SoundEvents.IRON_DOOR_OPEN, SoundEvents.IRON_TRAPDOOR_CLOSE, SoundEvents.IRON_TRAPDOOR_OPEN, SoundEvents.METAL_PRESSURE_PLATE_CLICK_OFF, SoundEvents.METAL_PRESSURE_PLATE_CLICK_ON, SoundEvents.STONE_BUTTON_CLICK_OFF, SoundEvents.STONE_BUTTON_CLICK_ON)); + public static final BlockSetType LEAD_BLOCK_SET = BlockSetType.register(new BlockSetType("lead", + false, false, false, + BlockSetType.PressurePlateSensitivity.MOBS, SoundType.METAL, + SoundEvents.IRON_DOOR_CLOSE, SoundEvents.IRON_DOOR_OPEN, + SoundEvents.IRON_TRAPDOOR_CLOSE, SoundEvents.IRON_TRAPDOOR_OPEN, + SoundEvents.METAL_PRESSURE_PLATE_CLICK_OFF, SoundEvents.METAL_PRESSURE_PLATE_CLICK_ON, + SoundEvents.STONE_BUTTON_CLICK_OFF, SoundEvents.STONE_BUTTON_CLICK_ON)); public static final DeferredBlock LEAD_DOOR = baseRegister("lead_door", () -> new LeadDoorBlock(leadDecoProperties()), block -> () -> new DoubleHighBlockItem(block.get(), new Item.Properties())); public static final DeferredBlock LEAD_TRAPDOOR = register("lead_trapdoor", () -> new LeadTrapdoorBlock(leadDecoProperties())); public static final DeferredBlock LEAD_BARS = register("lead_bars", () -> new LeadBarsBlock(leadDecoProperties())); + public static final DeferredBlock STURDY_LEVER = register("sturdy_lever", () -> new SturdyLeverBlock(leadProperties().noCollission().pushReaction(PushReaction.DESTROY))); + public static final DeferredBlock STURDY_BUTTON = register("sturdy_button", () -> new SturdyButtonBlock(leadProperties().noCollission().pushReaction(PushReaction.DESTROY))); + public static final DeferredBlock ELECTRUM_BLOCK = register("electrum_block", () -> new Block(Properties.of().strength(5.0F, 6.0F).requiresCorrectToolForDrops().sound(SoundType.METAL).mapColor(MapColor.SAND))); // Redstone components @@ -167,7 +207,6 @@ private static Properties silverProperties() { public static final Map> WAXED_CONCRETE_POWDER = registerColored(color -> "waxed_" + color + "_concrete_powder", dye -> new Block(Properties.ofFullCopy(Blocks.GREEN_CONCRETE_POWDER).mapColor(dye))); - // Fluids and Cauldrons public static final DeferredBlock MOLTEN_LEAD = HELPER.createBlockNoItem("molten_lead", () -> new MoltenLeadBlock(OFluids.MOLTEN_LEAD, Properties.ofFullCopy(Blocks.LAVA).mapColor(MapColor.COLOR_PURPLE))); @@ -198,8 +237,8 @@ public static DeferredBlock baseRegister(String name, Suppl return register; } - public static DeferredBlock register(String name, Supplier block) { - return (DeferredBlock) baseRegister(name, block, OBlocks::registerBlockItem); + public static DeferredBlock register(String name, Supplier block) { + return baseRegister(name, block, OBlocks::registerBlockItem); } private static Supplier registerBlockItem(final DeferredBlock block) { diff --git a/src/main/java/galena/oreganized/index/ODataMapTypes.java b/src/main/java/galena/oreganized/index/ODataMapTypes.java index 4301d87a..bb22f788 100644 --- a/src/main/java/galena/oreganized/index/ODataMapTypes.java +++ b/src/main/java/galena/oreganized/index/ODataMapTypes.java @@ -9,7 +9,7 @@ import net.neoforged.neoforge.registries.datamaps.DataMapType; import net.neoforged.neoforge.registries.datamaps.RegisterDataMapTypesEvent; -@EventBusSubscriber(modid = Oreganized.MOD_ID, bus = EventBusSubscriber.Bus.MOD) +@EventBusSubscriber(modid = Oreganized.MOD_ID) public class ODataMapTypes { public static final DataMapType TARNISHABLES = DataMapType.builder( diff --git a/src/main/java/galena/oreganized/index/OEntityTypes.java b/src/main/java/galena/oreganized/index/OEntityTypes.java index 8b50bfdf..c4bf32f2 100644 --- a/src/main/java/galena/oreganized/index/OEntityTypes.java +++ b/src/main/java/galena/oreganized/index/OEntityTypes.java @@ -15,7 +15,7 @@ import net.neoforged.neoforge.registries.DeferredHolder; import net.neoforged.neoforge.registries.DeferredRegister; -@EventBusSubscriber(modid = Oreganized.MOD_ID, bus = EventBusSubscriber.Bus.MOD) +@EventBusSubscriber(modid = Oreganized.MOD_ID) public class OEntityTypes { public static final DeferredRegister> ENTITIES = DeferredRegister.create(Registries.ENTITY_TYPE, Oreganized.MOD_ID); diff --git a/src/main/java/galena/oreganized/index/OParticleTypes.java b/src/main/java/galena/oreganized/index/OParticleTypes.java index 9bb3c9db..5d80c29d 100644 --- a/src/main/java/galena/oreganized/index/OParticleTypes.java +++ b/src/main/java/galena/oreganized/index/OParticleTypes.java @@ -14,7 +14,7 @@ import net.neoforged.neoforge.registries.DeferredHolder; import net.neoforged.neoforge.registries.DeferredRegister; -@EventBusSubscriber(modid = Oreganized.MOD_ID, value = Dist.CLIENT, bus = EventBusSubscriber.Bus.MOD) +@EventBusSubscriber(modid = Oreganized.MOD_ID, value = Dist.CLIENT) public class OParticleTypes { private static final DeferredRegister> PARTICLES = DeferredRegister.create(Registries.PARTICLE_TYPE, Oreganized.MOD_ID); diff --git a/src/main/java/galena/oreganized/index/OSoundEvents.java b/src/main/java/galena/oreganized/index/OSoundEvents.java index 1b1c8e1c..f54dedab 100644 --- a/src/main/java/galena/oreganized/index/OSoundEvents.java +++ b/src/main/java/galena/oreganized/index/OSoundEvents.java @@ -6,7 +6,7 @@ import net.neoforged.neoforge.registries.DeferredHolder; public class OSoundEvents { - public static SoundSubRegistryHelper HELPER = Oreganized.REGISTRY_HELPER.getSoundSubHelper(); + public static final SoundSubRegistryHelper HELPER = Oreganized.REGISTRY_HELPER.getSoundSubHelper(); public static final DeferredHolder MUSIC_DISC_STRUCTURE = HELPER.createSoundEvent("music.disc.structure"); diff --git a/src/main/java/galena/oreganized/mixin/PlayerMixin.java b/src/main/java/galena/oreganized/mixin/PlayerMixin.java deleted file mode 100644 index 9b85c05c..00000000 --- a/src/main/java/galena/oreganized/mixin/PlayerMixin.java +++ /dev/null @@ -1,67 +0,0 @@ -package galena.oreganized.mixin; - -import galena.oreganized.network.packet.DoorPushingPacket; -import galena.oreganized.world.IDoorProgressHolder; -import net.minecraft.server.level.ServerPlayer; -import net.minecraft.world.entity.player.Player; -import net.neoforged.neoforge.network.PacketDistributor; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -@Mixin(Player.class) -public class PlayerMixin implements IDoorProgressHolder { - - @Unique - private int oreganised$leadDoorOpeningProgress = 0; - - @Unique - private long oreganised$lastPress = 0; - - @Unique - @Override - public int oreganised$getOpeningProgress() { - return oreganised$leadDoorOpeningProgress; - } - - @Unique - private void oreganized$syncProgress(boolean pushing) { - var self = (Player) (Object) this; - - if (self instanceof ServerPlayer player) { - var packet = new DoorPushingPacket(self.getUUID(), pushing); - PacketDistributor.sendToPlayersInDimension(player.serverLevel(), packet); - } - } - - @Unique - @Override - public int oreganised$incrementOpeningProgress() { - var self = (Player) (Object) this; - oreganised$lastPress = self.level().getGameTime(); - oreganized$syncProgress(true); - return ++oreganised$leadDoorOpeningProgress; - } - - @Unique - @Override - public void oreganised$resetOpeningProgress() { - oreganised$leadDoorOpeningProgress = 0; - oreganized$syncProgress(false); - } - - @Inject( - method = "tick", - at = @At("HEAD") - ) - private void oreganised$onTick(CallbackInfo ci) { - if (oreganised$leadDoorOpeningProgress == 0) return; - var self = (Player) (Object) this; - if (self.level() == null || self.level().isClientSide) return; - var time = self.level().getGameTime(); - if (time - oreganised$lastPress > 6) oreganised$resetOpeningProgress(); - } - -} diff --git a/src/main/java/galena/oreganized/mixin/client/HumanoidModelMixin.java b/src/main/java/galena/oreganized/mixin/client/HumanoidModelMixin.java index c65a8bb3..b96afbd8 100644 --- a/src/main/java/galena/oreganized/mixin/client/HumanoidModelMixin.java +++ b/src/main/java/galena/oreganized/mixin/client/HumanoidModelMixin.java @@ -1,7 +1,7 @@ package galena.oreganized.mixin.client; import galena.oreganized.client.OreganizedClient; -import galena.oreganized.world.IDoorProgressHolder; +import galena.oreganized.content.block.PushableBlockEntity; import net.minecraft.client.model.HumanoidModel; import net.minecraft.world.entity.LivingEntity; import org.spongepowered.asm.mixin.Mixin; @@ -14,8 +14,7 @@ public class HumanoidModelMixin { @Inject(method = "poseRightArm", at = @At(value = "HEAD"), cancellable = true) public void poseRightArm(T entity, CallbackInfo ci) { - if (!(entity instanceof IDoorProgressHolder progressHolder)) return; - if (progressHolder.oreganised$getOpeningProgress() == 0) return; + if (!PushableBlockEntity.isPushing(entity)) return; var model = (HumanoidModel) (Object) this; OreganizedClient.renderThirdPersonArm(model.rightArm, true); @@ -25,8 +24,7 @@ public void poseRightArm(T entity, CallbackInfo ci) { @Inject(method = "poseLeftArm", at = @At(value = "HEAD"), cancellable = true) public void poseLeftArm(T entity, CallbackInfo ci) { - if (!(entity instanceof IDoorProgressHolder progressHolder)) return; - if (progressHolder.oreganised$getOpeningProgress() == 0) return; + if (!PushableBlockEntity.isPushing(entity)) return; var model = (HumanoidModel) (Object) this; OreganizedClient.renderThirdPersonArm(model.leftArm, false); diff --git a/src/main/java/galena/oreganized/network/OreganizedNetwork.java b/src/main/java/galena/oreganized/network/OreganizedNetwork.java index a42619ec..acce73d0 100644 --- a/src/main/java/galena/oreganized/network/OreganizedNetwork.java +++ b/src/main/java/galena/oreganized/network/OreganizedNetwork.java @@ -1,6 +1,5 @@ package galena.oreganized.network; -import galena.oreganized.network.packet.DoorPushingPacket; import galena.oreganized.network.packet.KineticHitPacket; import galena.oreganized.network.packet.TarnishParticlePacket; import net.neoforged.neoforge.network.event.RegisterPayloadHandlersEvent; @@ -11,7 +10,6 @@ public class OreganizedNetwork { public static void register(RegisterPayloadHandlersEvent event) { var registrar = event.registrar(PROTOCOL_VERSION); registrar.playToClient(TarnishParticlePacket.TYPE.type(), TarnishParticlePacket.TYPE.codec(), TarnishParticlePacket::handle); - registrar.playToClient(DoorPushingPacket.TYPE.type(), DoorPushingPacket.TYPE.codec(), DoorPushingPacket::handle); registrar.playToClient(KineticHitPacket.TYPE.type(), KineticHitPacket.TYPE.codec(), KineticHitPacket::handle); } } diff --git a/src/main/java/galena/oreganized/network/packet/DoorPushingPacket.java b/src/main/java/galena/oreganized/network/packet/DoorPushingPacket.java deleted file mode 100644 index bfc09a5b..00000000 --- a/src/main/java/galena/oreganized/network/packet/DoorPushingPacket.java +++ /dev/null @@ -1,39 +0,0 @@ -package galena.oreganized.network.packet; - -import galena.oreganized.Oreganized; -import galena.oreganized.world.IDoorProgressHolder; -import java.util.UUID; -import net.minecraft.core.UUIDUtil; -import net.minecraft.network.FriendlyByteBuf; -import net.minecraft.network.codec.ByteBufCodecs; -import net.minecraft.network.codec.StreamCodec; -import net.minecraft.network.protocol.common.custom.CustomPacketPayload; -import net.neoforged.neoforge.network.handling.IPayloadContext; - -public record DoorPushingPacket(UUID player, boolean pushing) implements CustomPacketPayload { - - public static final TypeAndCodec TYPE = new TypeAndCodec<>( - new Type<>(Oreganized.modLoc("door_pushing")), - StreamCodec.composite( - UUIDUtil.STREAM_CODEC, DoorPushingPacket::player, - ByteBufCodecs.BOOL, DoorPushingPacket::pushing, - DoorPushingPacket::new - ) - ); - - public void handle(IPayloadContext context) { - context.enqueueWork(() -> { - var player = context.player().level().getPlayerByUUID(player()); - if (player instanceof IDoorProgressHolder progressHolder) { - if (pushing) progressHolder.oreganised$incrementOpeningProgress(); - else progressHolder.oreganised$resetOpeningProgress(); - } - }); - } - - @Override - public Type type() { - return TYPE.type(); - } - -} diff --git a/src/main/java/galena/oreganized/world/IDoorProgressHolder.java b/src/main/java/galena/oreganized/world/IDoorProgressHolder.java deleted file mode 100644 index 01ce1ab0..00000000 --- a/src/main/java/galena/oreganized/world/IDoorProgressHolder.java +++ /dev/null @@ -1,11 +0,0 @@ -package galena.oreganized.world; - -public interface IDoorProgressHolder { - - int oreganised$getOpeningProgress(); - - int oreganised$incrementOpeningProgress(); - - void oreganised$resetOpeningProgress(); - -} diff --git a/src/main/resources/META-INF/accesstransformer.cfg b/src/main/resources/META-INF/accesstransformer.cfg index ac53ef71..2b8e959e 100644 --- a/src/main/resources/META-INF/accesstransformer.cfg +++ b/src/main/resources/META-INF/accesstransformer.cfg @@ -5,4 +5,6 @@ protected net.minecraft.world.level.block.DoorBlock playSound(Lnet/minecraft/wor protected net.minecraft.client.particle.CritParticle (Lnet/minecraft/client/multiplayer/ClientLevel;DDDDDD)V public net.minecraft.world.item.BrushItem$DustParticlesDelta public net.minecraft.world.item.BrushItem$DustParticlesDelta (DDD)V -protected net.minecraft.world.level.block.TrapDoorBlock toggle(Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/entity/player/Player;)V \ No newline at end of file +protected net.minecraft.world.level.block.TrapDoorBlock toggle(Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/entity/player/Player;)V +protected net.minecraft.world.level.block.ButtonBlock updateNeighbours(Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;)V +protected net.minecraft.world.level.block.LeverBlock updateNeighbours(Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/level/Level;Lnet/minecraft/core/BlockPos;)V diff --git a/src/main/resources/assets/oreganized/models/block/sturdy_button.json b/src/main/resources/assets/oreganized/models/block/sturdy_button.json new file mode 100644 index 00000000..e2494b59 --- /dev/null +++ b/src/main/resources/assets/oreganized/models/block/sturdy_button.json @@ -0,0 +1,78 @@ +{ + "parent": "block/block", + "textures": { + "texture": "oreganized:block/sturdy_button", + "particle": "#texture" + }, + "elements": [ + { + "from": [ + 4, + 0, + 4 + ], + "to": [ + 12, + 4, + 12 + ], + "faces": { + "down": { + "uv": [ + 0, + 0, + 8, + 8 + ], + "texture": "#texture", + "cullface": "down" + }, + "up": { + "uv": [ + 0, + 0, + 8, + 8 + ], + "texture": "#texture" + }, + "north": { + "uv": [ + 0, + 8, + 8, + 12 + ], + "texture": "#texture" + }, + "south": { + "uv": [ + 0, + 8, + 8, + 12 + ], + "texture": "#texture" + }, + "west": { + "uv": [ + 0, + 8, + 8, + 12 + ], + "texture": "#texture" + }, + "east": { + "uv": [ + 0, + 8, + 8, + 12 + ], + "texture": "#texture" + } + } + } + ] +} diff --git a/src/main/resources/assets/oreganized/models/block/sturdy_button_inventory.json b/src/main/resources/assets/oreganized/models/block/sturdy_button_inventory.json new file mode 100644 index 00000000..a61ba3ee --- /dev/null +++ b/src/main/resources/assets/oreganized/models/block/sturdy_button_inventory.json @@ -0,0 +1,77 @@ +{ + "parent": "block/block", + "textures": { + "texture": "oreganized:block/sturdy_button", + "particle": "#texture" + }, + "elements": [ + { + "from": [ + 4, + 6, + 4 + ], + "to": [ + 12, + 10, + 12 + ], + "faces": { + "north": { + "uv": [ + 0, + 8, + 8, + 12 + ], + "texture": "#texture" + }, + "east": { + "uv": [ + 0, + 8, + 8, + 12 + ], + "texture": "#texture" + }, + "south": { + "uv": [ + 0, + 8, + 8, + 12 + ], + "texture": "#texture" + }, + "west": { + "uv": [ + 0, + 8, + 8, + 12 + ], + "texture": "#texture" + }, + "up": { + "uv": [ + 0, + 0, + 8, + 8 + ], + "texture": "#texture" + }, + "down": { + "uv": [ + 0, + 0, + 8, + 8 + ], + "texture": "#texture" + } + } + } + ] +} diff --git a/src/main/resources/assets/oreganized/models/block/sturdy_button_pressed.json b/src/main/resources/assets/oreganized/models/block/sturdy_button_pressed.json new file mode 100644 index 00000000..bf17b032 --- /dev/null +++ b/src/main/resources/assets/oreganized/models/block/sturdy_button_pressed.json @@ -0,0 +1,78 @@ +{ + "parent": "block/block", + "textures": { + "texture": "oreganized:block/sturdy_button", + "particle": "#texture" + }, + "elements": [ + { + "from": [ + 4, + 0, + 4 + ], + "to": [ + 12, + 2, + 12 + ], + "faces": { + "down": { + "uv": [ + 0, + 0, + 8, + 8 + ], + "texture": "#texture", + "cullface": "down" + }, + "up": { + "uv": [ + 0, + 0, + 8, + 8 + ], + "texture": "#texture" + }, + "north": { + "uv": [ + 0, + 8, + 8, + 10 + ], + "texture": "#texture" + }, + "south": { + "uv": [ + 0, + 8, + 8, + 10 + ], + "texture": "#texture" + }, + "west": { + "uv": [ + 0, + 8, + 8, + 10 + ], + "texture": "#texture" + }, + "east": { + "uv": [ + 0, + 8, + 8, + 10 + ], + "texture": "#texture" + } + } + } + ] +} diff --git a/src/main/resources/assets/oreganized/models/block/sturdy_lever.json b/src/main/resources/assets/oreganized/models/block/sturdy_lever.json new file mode 100644 index 00000000..84956b7f --- /dev/null +++ b/src/main/resources/assets/oreganized/models/block/sturdy_lever.json @@ -0,0 +1,333 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "#base", + "base": "oreganized:block/sturdy_lever_base", + "lever": "oreganized:block/sturdy_lever" + }, + "elements": [ + { + "from": [ + 2, + 0, + 2 + ], + "to": [ + 14, + 2, + 14 + ], + "faces": { + "down": { + "uv": [ + 4, + 0, + 16, + 12 + ], + "texture": "#base", + "cullface": "down" + }, + "up": { + "uv": [ + 4, + 0, + 16, + 12 + ], + "texture": "#base" + }, + "north": { + "uv": [ + 4, + 12, + 16, + 14 + ], + "texture": "#base" + }, + "south": { + "uv": [ + 4, + 12, + 16, + 14 + ], + "texture": "#base" + }, + "west": { + "uv": [ + 4, + 12, + 16, + 14 + ], + "texture": "#base" + }, + "east": { + "uv": [ + 4, + 12, + 16, + 14 + ], + "texture": "#base" + } + } + }, + { + "from": [ + 3, + 3, + 9 + ], + "to": [ + 5, + 8, + 11 + ], + "rotation": { + "origin": [ + 8, + -3, + 10 + ], + "axis": "x", + "angle": -45 + }, + "faces": { + "north": { + "uv": [ + 2, + 11, + 4, + 16 + ], + "texture": "#lever" + }, + "south": { + "uv": [ + 2, + 11, + 4, + 16 + ], + "texture": "#lever" + }, + "west": { + "uv": [ + 0, + 11, + 2, + 16 + ], + "texture": "#lever" + }, + "east": { + "uv": [ + 0, + 11, + 2, + 16 + ], + "texture": "#lever" + } + } + }, + { + "from": [ + 11, + 3, + 9 + ], + "to": [ + 13, + 8, + 11 + ], + "rotation": { + "origin": [ + 8, + -3, + 10 + ], + "axis": "x", + "angle": -45 + }, + "faces": { + "north": { + "uv": [ + 0, + 11, + 2, + 16 + ], + "texture": "#lever" + }, + "south": { + "uv": [ + 0, + 11, + 2, + 16 + ], + "texture": "#lever" + }, + "west": { + "uv": [ + 2, + 11, + 4, + 16 + ], + "texture": "#lever" + }, + "east": { + "uv": [ + 2, + 11, + 4, + 16 + ], + "texture": "#lever" + } + } + }, + { + "from": [ + 5, + 4, + 9 + ], + "to": [ + 11, + 6, + 11 + ], + "rotation": { + "origin": [ + 8, + -3, + 10 + ], + "axis": "x", + "angle": -45 + }, + "faces": { + "down": { + "uv": [ + 3, + 8, + 9, + 10 + ], + "texture": "#lever" + }, + "up": { + "uv": [ + 3, + 8, + 9, + 10 + ], + "texture": "#lever" + }, + "north": { + "uv": [ + 3, + 8, + 9, + 10 + ], + "texture": "#lever" + }, + "south": { + "uv": [ + 3, + 8, + 9, + 10 + ], + "texture": "#lever" + } + } + }, + { + "from": [ + 2, + 8, + 8 + ], + "to": [ + 14, + 12, + 12 + ], + "rotation": { + "origin": [ + 8, + -3, + 10 + ], + "axis": "x", + "angle": -45 + }, + "faces": { + "down": { + "uv": [ + 4, + 0, + 16, + 4 + ], + "texture": "#lever" + }, + "up": { + "uv": [ + 0, + 4, + 12, + 8 + ], + "texture": "#lever" + }, + "north": { + "uv": [ + 0, + 4, + 12, + 8 + ], + "texture": "#lever" + }, + "south": { + "uv": [ + 0, + 4, + 12, + 8 + ], + "texture": "#lever" + }, + "west": { + "uv": [ + 12, + 4, + 16, + 8 + ], + "texture": "#lever" + }, + "east": { + "uv": [ + 12, + 4, + 16, + 8 + ], + "texture": "#lever" + } + } + } + ] +} diff --git a/src/main/resources/assets/oreganized/models/block/sturdy_lever_on.json b/src/main/resources/assets/oreganized/models/block/sturdy_lever_on.json new file mode 100644 index 00000000..a0889863 --- /dev/null +++ b/src/main/resources/assets/oreganized/models/block/sturdy_lever_on.json @@ -0,0 +1,333 @@ +{ + "ambientocclusion": false, + "textures": { + "particle": "#base", + "base": "oreganized:block/sturdy_lever_base", + "lever": "oreganized:block/sturdy_lever" + }, + "elements": [ + { + "from": [ + 2, + 0, + 2 + ], + "to": [ + 14, + 2, + 14 + ], + "faces": { + "down": { + "uv": [ + 4, + 0, + 16, + 12 + ], + "texture": "#base", + "cullface": "down" + }, + "up": { + "uv": [ + 4, + 0, + 16, + 12 + ], + "texture": "#base" + }, + "north": { + "uv": [ + 4, + 12, + 16, + 14 + ], + "texture": "#base" + }, + "south": { + "uv": [ + 4, + 12, + 16, + 14 + ], + "texture": "#base" + }, + "west": { + "uv": [ + 4, + 12, + 16, + 14 + ], + "texture": "#base" + }, + "east": { + "uv": [ + 4, + 12, + 16, + 14 + ], + "texture": "#base" + } + } + }, + { + "from": [ + 3, + 3, + 5 + ], + "to": [ + 5, + 8, + 7 + ], + "rotation": { + "origin": [ + 8, + -3, + 6 + ], + "axis": "x", + "angle": 45 + }, + "faces": { + "north": { + "uv": [ + 2, + 11, + 4, + 16 + ], + "texture": "#lever" + }, + "south": { + "uv": [ + 2, + 11, + 4, + 16 + ], + "texture": "#lever" + }, + "west": { + "uv": [ + 0, + 11, + 2, + 16 + ], + "texture": "#lever" + }, + "east": { + "uv": [ + 0, + 11, + 2, + 16 + ], + "texture": "#lever" + } + } + }, + { + "from": [ + 11, + 3, + 5 + ], + "to": [ + 13, + 8, + 7 + ], + "rotation": { + "origin": [ + 8, + -3, + 6 + ], + "axis": "x", + "angle": 45 + }, + "faces": { + "north": { + "uv": [ + 0, + 11, + 2, + 16 + ], + "texture": "#lever" + }, + "south": { + "uv": [ + 0, + 11, + 2, + 16 + ], + "texture": "#lever" + }, + "west": { + "uv": [ + 2, + 11, + 4, + 16 + ], + "texture": "#lever" + }, + "east": { + "uv": [ + 2, + 11, + 4, + 16 + ], + "texture": "#lever" + } + } + }, + { + "from": [ + 5, + 4, + 5 + ], + "to": [ + 11, + 6, + 7 + ], + "rotation": { + "origin": [ + 8, + -3, + 6 + ], + "axis": "x", + "angle": 45 + }, + "faces": { + "down": { + "uv": [ + 3, + 8, + 9, + 10 + ], + "texture": "#lever" + }, + "up": { + "uv": [ + 3, + 8, + 9, + 10 + ], + "texture": "#lever" + }, + "north": { + "uv": [ + 3, + 8, + 9, + 10 + ], + "texture": "#lever" + }, + "south": { + "uv": [ + 3, + 8, + 9, + 10 + ], + "texture": "#lever" + } + } + }, + { + "from": [ + 2, + 8, + 4 + ], + "to": [ + 14, + 12, + 8 + ], + "rotation": { + "origin": [ + 8, + -3, + 6 + ], + "axis": "x", + "angle": 45 + }, + "faces": { + "down": { + "uv": [ + 4, + 0, + 16, + 4 + ], + "texture": "#lever" + }, + "up": { + "uv": [ + 0, + 4, + 12, + 8 + ], + "texture": "#lever" + }, + "north": { + "uv": [ + 0, + 4, + 12, + 8 + ], + "texture": "#lever" + }, + "south": { + "uv": [ + 0, + 4, + 12, + 8 + ], + "texture": "#lever" + }, + "west": { + "uv": [ + 12, + 4, + 16, + 8 + ], + "texture": "#lever" + }, + "east": { + "uv": [ + 12, + 4, + 16, + 8 + ], + "texture": "#lever" + } + } + } + ] +} diff --git a/src/main/resources/assets/oreganized/textures/block/goopy_lead_door_bottom_closed.png b/src/main/resources/assets/oreganized/textures/block/goopy_lead_door_bottom_closed.png deleted file mode 100644 index ed34a60c..00000000 Binary files a/src/main/resources/assets/oreganized/textures/block/goopy_lead_door_bottom_closed.png and /dev/null differ diff --git a/src/main/resources/assets/oreganized/textures/block/goopy_lead_door_bottom_closing.png b/src/main/resources/assets/oreganized/textures/block/goopy_lead_door_bottom_closing.png deleted file mode 100644 index a7fc8021..00000000 Binary files a/src/main/resources/assets/oreganized/textures/block/goopy_lead_door_bottom_closing.png and /dev/null differ diff --git a/src/main/resources/assets/oreganized/textures/block/goopy_lead_door_bottom_open.png b/src/main/resources/assets/oreganized/textures/block/goopy_lead_door_bottom_open.png index a8b4d03b..ed34a60c 100644 Binary files a/src/main/resources/assets/oreganized/textures/block/goopy_lead_door_bottom_open.png and b/src/main/resources/assets/oreganized/textures/block/goopy_lead_door_bottom_open.png differ diff --git a/src/main/resources/assets/oreganized/textures/block/goopy_lead_door_bottom_opening.png b/src/main/resources/assets/oreganized/textures/block/goopy_lead_door_bottom_opening.png deleted file mode 100644 index a7fc8021..00000000 Binary files a/src/main/resources/assets/oreganized/textures/block/goopy_lead_door_bottom_opening.png and /dev/null differ diff --git a/src/main/resources/assets/oreganized/textures/block/goopy_lead_door_top_closed.png b/src/main/resources/assets/oreganized/textures/block/goopy_lead_door_top_closed.png deleted file mode 100644 index 0c960d7a..00000000 Binary files a/src/main/resources/assets/oreganized/textures/block/goopy_lead_door_top_closed.png and /dev/null differ diff --git a/src/main/resources/assets/oreganized/textures/block/goopy_lead_door_top_closing.png b/src/main/resources/assets/oreganized/textures/block/goopy_lead_door_top_closing.png deleted file mode 100644 index 087538e6..00000000 Binary files a/src/main/resources/assets/oreganized/textures/block/goopy_lead_door_top_closing.png and /dev/null differ diff --git a/src/main/resources/assets/oreganized/textures/block/goopy_lead_door_top_open.png b/src/main/resources/assets/oreganized/textures/block/goopy_lead_door_top_open.png index 5d328a4b..0c960d7a 100644 Binary files a/src/main/resources/assets/oreganized/textures/block/goopy_lead_door_top_open.png and b/src/main/resources/assets/oreganized/textures/block/goopy_lead_door_top_open.png differ diff --git a/src/main/resources/assets/oreganized/textures/block/goopy_lead_door_top_opening.png b/src/main/resources/assets/oreganized/textures/block/goopy_lead_door_top_opening.png deleted file mode 100644 index 087538e6..00000000 Binary files a/src/main/resources/assets/oreganized/textures/block/goopy_lead_door_top_opening.png and /dev/null differ diff --git a/src/main/resources/assets/oreganized/textures/block/goopy_lead_button.png b/src/main/resources/assets/oreganized/textures/block/goopy_sturdy_button.png similarity index 100% rename from src/main/resources/assets/oreganized/textures/block/goopy_lead_button.png rename to src/main/resources/assets/oreganized/textures/block/goopy_sturdy_button.png diff --git a/src/main/resources/assets/oreganized/textures/block/goopy_sturdy_lever.png b/src/main/resources/assets/oreganized/textures/block/goopy_sturdy_lever.png new file mode 100644 index 00000000..5791d316 Binary files /dev/null and b/src/main/resources/assets/oreganized/textures/block/goopy_sturdy_lever.png differ diff --git a/src/main/resources/assets/oreganized/textures/block/goopy_sturdy_lever_base.png b/src/main/resources/assets/oreganized/textures/block/goopy_sturdy_lever_base.png new file mode 100644 index 00000000..5e02d966 Binary files /dev/null and b/src/main/resources/assets/oreganized/textures/block/goopy_sturdy_lever_base.png differ diff --git a/src/main/resources/assets/oreganized/textures/block/lead_button.png b/src/main/resources/assets/oreganized/textures/block/lead_button.png deleted file mode 100644 index 8178e884..00000000 Binary files a/src/main/resources/assets/oreganized/textures/block/lead_button.png and /dev/null differ diff --git a/src/main/resources/assets/oreganized/textures/block/lead_door_bottom.png b/src/main/resources/assets/oreganized/textures/block/lead_door_bottom.png index 89df688b..b902fbf7 100644 Binary files a/src/main/resources/assets/oreganized/textures/block/lead_door_bottom.png and b/src/main/resources/assets/oreganized/textures/block/lead_door_bottom.png differ diff --git a/src/main/resources/assets/oreganized/textures/block/lead_door_bottom_closed.png b/src/main/resources/assets/oreganized/textures/block/lead_door_bottom_closed.png deleted file mode 100644 index 34de12b8..00000000 Binary files a/src/main/resources/assets/oreganized/textures/block/lead_door_bottom_closed.png and /dev/null differ diff --git a/src/main/resources/assets/oreganized/textures/block/lead_door_bottom_closing.png b/src/main/resources/assets/oreganized/textures/block/lead_door_bottom_closing.png deleted file mode 100644 index 487fefcb..00000000 Binary files a/src/main/resources/assets/oreganized/textures/block/lead_door_bottom_closing.png and /dev/null differ diff --git a/src/main/resources/assets/oreganized/textures/block/lead_door_bottom_closing.png.mcmeta b/src/main/resources/assets/oreganized/textures/block/lead_door_bottom_closing.png.mcmeta deleted file mode 100644 index 49ff0489..00000000 --- a/src/main/resources/assets/oreganized/textures/block/lead_door_bottom_closing.png.mcmeta +++ /dev/null @@ -1,8 +0,0 @@ -{ - "animation": { - "frametime": 6, - "frames": [ - 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 - ] - } -} diff --git a/src/main/resources/assets/oreganized/textures/block/lead_door_bottom_open.png b/src/main/resources/assets/oreganized/textures/block/lead_door_bottom_open.png index b902fbf7..34de12b8 100644 Binary files a/src/main/resources/assets/oreganized/textures/block/lead_door_bottom_open.png and b/src/main/resources/assets/oreganized/textures/block/lead_door_bottom_open.png differ diff --git a/src/main/resources/assets/oreganized/textures/block/lead_door_bottom_opening.png b/src/main/resources/assets/oreganized/textures/block/lead_door_bottom_opening.png deleted file mode 100644 index 487fefcb..00000000 Binary files a/src/main/resources/assets/oreganized/textures/block/lead_door_bottom_opening.png and /dev/null differ diff --git a/src/main/resources/assets/oreganized/textures/block/lead_door_bottom_opening.png.mcmeta b/src/main/resources/assets/oreganized/textures/block/lead_door_bottom_opening.png.mcmeta deleted file mode 100644 index 221a8cae..00000000 --- a/src/main/resources/assets/oreganized/textures/block/lead_door_bottom_opening.png.mcmeta +++ /dev/null @@ -1,5 +0,0 @@ -{ - "animation": { - "frametime": 6 - } -} diff --git a/src/main/resources/assets/oreganized/textures/block/lead_door_top.png b/src/main/resources/assets/oreganized/textures/block/lead_door_top.png index d538dbee..30d7dba5 100644 Binary files a/src/main/resources/assets/oreganized/textures/block/lead_door_top.png and b/src/main/resources/assets/oreganized/textures/block/lead_door_top.png differ diff --git a/src/main/resources/assets/oreganized/textures/block/lead_door_top_closed.png b/src/main/resources/assets/oreganized/textures/block/lead_door_top_closed.png deleted file mode 100644 index 7a83f262..00000000 Binary files a/src/main/resources/assets/oreganized/textures/block/lead_door_top_closed.png and /dev/null differ diff --git a/src/main/resources/assets/oreganized/textures/block/lead_door_top_closing.png b/src/main/resources/assets/oreganized/textures/block/lead_door_top_closing.png deleted file mode 100644 index f21c89a8..00000000 Binary files a/src/main/resources/assets/oreganized/textures/block/lead_door_top_closing.png and /dev/null differ diff --git a/src/main/resources/assets/oreganized/textures/block/lead_door_top_closing.png.mcmeta b/src/main/resources/assets/oreganized/textures/block/lead_door_top_closing.png.mcmeta deleted file mode 100644 index 49ff0489..00000000 --- a/src/main/resources/assets/oreganized/textures/block/lead_door_top_closing.png.mcmeta +++ /dev/null @@ -1,8 +0,0 @@ -{ - "animation": { - "frametime": 6, - "frames": [ - 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 - ] - } -} diff --git a/src/main/resources/assets/oreganized/textures/block/lead_door_top_open.png b/src/main/resources/assets/oreganized/textures/block/lead_door_top_open.png index 30d7dba5..7a83f262 100644 Binary files a/src/main/resources/assets/oreganized/textures/block/lead_door_top_open.png and b/src/main/resources/assets/oreganized/textures/block/lead_door_top_open.png differ diff --git a/src/main/resources/assets/oreganized/textures/block/lead_door_top_opening.png b/src/main/resources/assets/oreganized/textures/block/lead_door_top_opening.png deleted file mode 100644 index f21c89a8..00000000 Binary files a/src/main/resources/assets/oreganized/textures/block/lead_door_top_opening.png and /dev/null differ diff --git a/src/main/resources/assets/oreganized/textures/block/lead_door_top_opening.png.mcmeta b/src/main/resources/assets/oreganized/textures/block/lead_door_top_opening.png.mcmeta deleted file mode 100644 index 221a8cae..00000000 --- a/src/main/resources/assets/oreganized/textures/block/lead_door_top_opening.png.mcmeta +++ /dev/null @@ -1,5 +0,0 @@ -{ - "animation": { - "frametime": 6 - } -} diff --git a/src/main/resources/assets/oreganized/textures/block/red_hot_sturdy_button.png b/src/main/resources/assets/oreganized/textures/block/red_hot_sturdy_button.png new file mode 100644 index 00000000..340c29f1 Binary files /dev/null and b/src/main/resources/assets/oreganized/textures/block/red_hot_sturdy_button.png differ diff --git a/src/main/resources/assets/oreganized/textures/block/red_hot_sturdy_lever.png b/src/main/resources/assets/oreganized/textures/block/red_hot_sturdy_lever.png new file mode 100644 index 00000000..456fcd38 Binary files /dev/null and b/src/main/resources/assets/oreganized/textures/block/red_hot_sturdy_lever.png differ diff --git a/src/main/resources/assets/oreganized/textures/block/red_hot_sturdy_lever_base.png b/src/main/resources/assets/oreganized/textures/block/red_hot_sturdy_lever_base.png new file mode 100644 index 00000000..20fd77ac Binary files /dev/null and b/src/main/resources/assets/oreganized/textures/block/red_hot_sturdy_lever_base.png differ diff --git a/src/main/resources/assets/oreganized/textures/block/sturdy_button.png b/src/main/resources/assets/oreganized/textures/block/sturdy_button.png new file mode 100644 index 00000000..6e881f17 Binary files /dev/null and b/src/main/resources/assets/oreganized/textures/block/sturdy_button.png differ diff --git a/src/main/resources/assets/oreganized/textures/block/sturdy_lever.png b/src/main/resources/assets/oreganized/textures/block/sturdy_lever.png new file mode 100644 index 00000000..d3373a1b Binary files /dev/null and b/src/main/resources/assets/oreganized/textures/block/sturdy_lever.png differ diff --git a/src/main/resources/assets/oreganized/textures/block/sturdy_lever_base.png b/src/main/resources/assets/oreganized/textures/block/sturdy_lever_base.png new file mode 100644 index 00000000..1cb24bb7 Binary files /dev/null and b/src/main/resources/assets/oreganized/textures/block/sturdy_lever_base.png differ diff --git a/src/main/resources/assets/oreganized/textures/block/sturdy_lever_item.png b/src/main/resources/assets/oreganized/textures/block/sturdy_lever_item.png new file mode 100644 index 00000000..78c35d1b Binary files /dev/null and b/src/main/resources/assets/oreganized/textures/block/sturdy_lever_item.png differ diff --git a/src/main/resources/oreganized.mixins.json b/src/main/resources/oreganized.mixins.json index 69215b62..273feb83 100644 --- a/src/main/resources/oreganized.mixins.json +++ b/src/main/resources/oreganized.mixins.json @@ -19,7 +19,6 @@ "MobEffectInstanceMixin", "MobMixin", "PillagerMixin", - "PlayerMixin", "WalkNodeEvaluatorMixin", "compat.AirCurrentMixin", "compat.BellowBlockTileMixin",