Skip to content

Commit e557f2a

Browse files
authored
Merge pull request #49 from Xaidee/feature/scribe
2 parents d82f5d8 + e8cbb85 commit e557f2a

File tree

22 files changed

+221
-8
lines changed

22 files changed

+221
-8
lines changed

build.gradle

+5
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,11 @@ dependencies {
9696
implementation fg.deobf("com.teamabnormals:blueprint:${minecraft_version}-${blueprint_version}")
9797
annotationProcessor "org.spongepowered:mixin:${mixin_version}:processor"
9898

99+
compileOnly(annotationProcessor("io.github.llamalad7:mixinextras-common:0.4.1"))
100+
implementation(jarJar("io.github.llamalad7:mixinextras-forge:${mixin_extras_version}")) {
101+
jarJar.ranged(it, "[${mixin_extras_version},)")
102+
}
103+
99104
// Compatibilities
100105
runtimeOnly(fg.deobf("maven.modrinth:create:${create_version}"))
101106
implementation(fg.deobf("maven.modrinth:farmers-delight:${farmersdelight_version}"))

gradle.properties

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ forge_version=47.1.3
1919
# Mixin
2020
mixingradle_version=0.7-SNAPSHOT
2121
mixin_version=0.8.5
22+
mixin_extras_version=0.4.1
2223

2324
# Other Dependencies
2425
blueprint_version=7.1.0

src/generated/resources/.cache/4d87f6c700406347abbc935fa7e5d5e893a595b5

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// 1.20.1 2024-08-28T12:15:19.543716 oreganized Item Models
1+
// 1.20.1 2024-08-28T12:35:31.5287616 oreganized Item Models
22
18fcb236eeab67fa16a0014d9af5ba7dd6f9e7c8 assets/oreganized/models/item/black_crystal_glass.json
33
30bbb36792cb2d3f0a8a399f25238120cdf7e659 assets/oreganized/models/item/black_crystal_glass_pane.json
44
8dcab59e8c34403761c4aec2c3357b7db80b3f0b assets/oreganized/models/item/blue_crystal_glass.json
@@ -121,6 +121,7 @@ f7c411b709a3af883b55ceb15524a116468ee0b4 assets/oreganized/models/item/purple_cr
121121
0eb2d49665d43c865870beb62e13499299fd7174 assets/oreganized/models/item/raw_silver_block.json
122122
848e82277b2a6223f4d24e6e8e53fd2769263be0 assets/oreganized/models/item/red_crystal_glass.json
123123
1cbba207d199088dd85850ea56d55d5976e15f3c assets/oreganized/models/item/red_crystal_glass_pane.json
124+
4c384b6c9ca85ea3aa0aca55eea89363d8355bd7 assets/oreganized/models/item/scribe.json
124125
2f15086e7865fc768aa268ec9b3797e818976165 assets/oreganized/models/item/shrapnel_bomb.json
125126
0a859cda7510d7756a43cfdf4bac94b2ed57ddb6 assets/oreganized/models/item/shrapnel_bomb_minecart.json
126127
13ffab906a6704c68eb4fef73382a7b0e0a5d5be assets/oreganized/models/item/silver_ingot.json

src/generated/resources/.cache/5bb646c3cee204f41a1b59a2c0d9083b5f7155b0

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// 1.20.1 2024-07-22T22:02:00.7201533 Oreganized Block Tags
1+
// 1.20.1 2024-08-28T12:35:31.5287616 Oreganized Block Tags
22
7a2d68d81bc5ee59f9a2f4ba68ddb39bfd9c875d data/forge/tags/blocks/glass.json
33
d96b4f83e03abe39a1b97d92b7818c8f6b2e5c68 data/forge/tags/blocks/glass_panes.json
44
d062c23ad5308b7de0b2e86f6531ea724530f898 data/forge/tags/blocks/melts_lead.json
@@ -30,4 +30,5 @@ a4acb3623320f801e89e3451f8b7d9e2246f99d0 data/minecraft/tags/blocks/walls.json
3030
81fb1b18afaa14ae90800b23c32de565d1389bb3 data/oreganized/tags/blocks/crystal_glass.json
3131
f1dfddab1e3f2dec1e7ed1c3fbf9f6a7f261cf08 data/oreganized/tags/blocks/crystal_glass_panes.json
3232
6b73bb0ce38222c428d54ee64e82ffa1d96c64d7 data/oreganized/tags/blocks/fire_source.json
33+
81e3d74d8e9abfe57f1388c75a381dd419a44695 data/oreganized/tags/blocks/mineable/scribe.json
3334
3112fb4a1df2953e2c3572fa47f886bf8e5bd679 data/oreganized/tags/blocks/stone_types/glance.json

src/generated/resources/.cache/9fb1092f32d4fcbf9e061ffd718d4ec689c6c95e

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// 1.20.1 2024-08-28T12:15:19.5367066 Recipes
1+
// 1.20.1 2024-08-28T12:49:10.1978323 Recipes
22
c27d3499944bf522a573dc8987582db2d7349b41 data/oreganized/advancements/recipes/brewing/poisonous_potato_from_lead.json
33
ee5e42ab2e9ac549022fadf1c2cbf9faebc2c53c data/oreganized/advancements/recipes/building_blocks/black_crystal_glass_pane.json
44
40700c3f2f5c78c617650fdd16e2ba248967353f data/oreganized/advancements/recipes/building_blocks/blue_crystal_glass_pane.json
@@ -139,6 +139,7 @@ fea94b2bd9d8d2a9ef8e130ad2eb404691da858d data/oreganized/advancements/recipes/re
139139
716ef31e308f24d22ef6dae98e96fe9b16169e9b data/oreganized/advancements/recipes/redstone/lead_trapdoor.json
140140
d8d4342744c72378bf0e7430305569819e8eeef1 data/oreganized/advancements/recipes/redstone/shrapnel_bomb.json
141141
430e8110352b21c77fe0b3cb175b5b3fc4c6e4fd data/oreganized/advancements/recipes/tools/bush_hammer.json
142+
4a68b65b81f872d9396798417f3ff5be886ce70c data/oreganized/advancements/recipes/tools/scribe.json
142143
57cf50f8e6ff4069b2fdc5fcf0e5092b68377468 data/oreganized/advancements/recipes/tools/silver_mirror.json
143144
bd88fa660d3a40c321d3288b127cfe99e795cb6f data/oreganized/advancements/recipes/transportation/shrapnel_bomb_minecart.json
144145
ee154313df45723058ea98bd9cbc74eeb3e1293f data/oreganized/recipes/black_crystal_glass.json
@@ -227,6 +228,7 @@ de027e6a84b7854012960c27c03f18c22de4cc78 data/oreganized/recipes/raw_lead_block.
227228
7c161f552218843de6033c84fdbcda9f024de464 data/oreganized/recipes/raw_silver_from_block.json
228229
2deee8e79dab0cc6a48f66589d44f3e2ee6df545 data/oreganized/recipes/red_crystal_glass.json
229230
f143419602a22f529db20cea44e5e370e8e4d868 data/oreganized/recipes/red_crystal_glass_pane.json
231+
06ea07eed909dbcff647ac8724355430c1817e0e data/oreganized/recipes/scribe.json
230232
194a5e4bfb1acbb98161ddeb6c0af5b21917e508 data/oreganized/recipes/shrapnel_bomb.json
231233
cedc682018d184f9f9f384afe3b157e6cbfff4b1 data/oreganized/recipes/shrapnel_bomb_minecart.json
232234
07595b3d623aafa3ef700093ec0449ebafa1ed27 data/oreganized/recipes/silver_block.json

src/generated/resources/assets/oreganized/lang/en_us.json

+1
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@
128128
"item.oreganized.netherite_nugget": "Netherite Nugget",
129129
"item.oreganized.raw_lead": "Raw Lead",
130130
"item.oreganized.raw_silver": "Raw Silver",
131+
"item.oreganized.scribe": "Scribe",
131132
"item.oreganized.shrapnel_bomb_minecart": "Minecart with Shrapnel Bomb",
132133
"item.oreganized.silver_ingot": "Silver Ingot",
133134
"item.oreganized.silver_mirror": "Silver Mirror",
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"parent": "minecraft:item/handheld",
3+
"textures": {
4+
"layer0": "oreganized:item/scribe"
5+
}
6+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
{
2+
"parent": "minecraft:recipes/root",
3+
"criteria": {
4+
"has_amethyst": {
5+
"conditions": {
6+
"items": [
7+
{
8+
"items": [
9+
"minecraft:amethyst_shard"
10+
]
11+
}
12+
]
13+
},
14+
"trigger": "minecraft:inventory_changed"
15+
},
16+
"has_silver": {
17+
"conditions": {
18+
"items": [
19+
{
20+
"tag": "forge:ingots/silver"
21+
}
22+
]
23+
},
24+
"trigger": "minecraft:inventory_changed"
25+
},
26+
"has_the_recipe": {
27+
"conditions": {
28+
"recipe": "oreganized:scribe"
29+
},
30+
"trigger": "minecraft:recipe_unlocked"
31+
}
32+
},
33+
"requirements": [
34+
[
35+
"has_silver",
36+
"has_amethyst",
37+
"has_the_recipe"
38+
]
39+
],
40+
"rewards": {
41+
"recipes": [
42+
"oreganized:scribe"
43+
]
44+
},
45+
"sends_telemetry_event": false
46+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
{
2+
"type": "minecraft:crafting_shaped",
3+
"category": "equipment",
4+
"key": {
5+
"A": {
6+
"item": "minecraft:amethyst_shard"
7+
},
8+
"S": {
9+
"tag": "forge:ingots/silver"
10+
}
11+
},
12+
"pattern": [
13+
"A",
14+
"S",
15+
"S"
16+
],
17+
"result": {
18+
"item": "oreganized:scribe"
19+
},
20+
"show_notification": true
21+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"values": [
3+
"#forge:glass",
4+
"#forge:obsidian",
5+
"#minecraft:ice",
6+
"#forge:storage_blocks/amethyst"
7+
]
8+
}

src/main/java/galena/oreganized/Oreganized.java

+1
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,7 @@ public void buildCreativeModeTabContents(BuildCreativeModeTabContentsEvent event
368368
putBefore(entries, Items.SPYGLASS, OItems.SILVER_MIRROR);
369369
putAfter(entries, Items.TNT_MINECART, OItems.SHRAPNEL_BOMB_MINECART);
370370
putBefore(entries, Items.MUSIC_DISC_5, OItems.MUSIC_DISC_STRUCTURE);
371+
putAfter(entries, Items.SHEARS, OItems.SCRIBE);
371372
}
372373
if (tab == CreativeModeTabs.COMBAT) {
373374
putBefore(entries, Items.NETHERITE_SWORD, OItems.ELECTRUM_SWORD);

src/main/java/galena/oreganized/content/item/BushHammerItem.java

-4
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,9 @@
11
package galena.oreganized.content.item;
22

33
import com.google.common.collect.ImmutableMap;
4-
import galena.oreganized.OreganizedConfig;
54
import galena.oreganized.index.OTags;
65
import net.minecraft.core.BlockPos;
76
import net.minecraft.core.Direction;
8-
import net.minecraft.core.NonNullList;
9-
import net.minecraft.sounds.SoundEvents;
10-
import net.minecraft.sounds.SoundSource;
117
import net.minecraft.world.InteractionResult;
128
import net.minecraft.world.entity.player.Player;
139
import net.minecraft.world.item.*;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package galena.oreganized.content.item;
2+
3+
import net.minecraft.core.BlockPos;
4+
import net.minecraft.world.entity.EquipmentSlot;
5+
import net.minecraft.world.entity.LivingEntity;
6+
import net.minecraft.world.item.Item;
7+
import net.minecraft.world.item.ItemStack;
8+
import net.minecraft.world.level.Level;
9+
import net.minecraft.world.level.block.state.BlockState;
10+
11+
import static galena.oreganized.index.OTags.Blocks.MINEABLE_WITH_SCRIBE;
12+
13+
public class ScribeItem extends Item {
14+
15+
public ScribeItem(Properties properties) {
16+
super(properties);
17+
}
18+
19+
public boolean mineBlock(ItemStack stack, Level level, BlockState state, BlockPos pos, LivingEntity user) {
20+
if (!level.isClientSide && state.getDestroySpeed(level, pos) != 0F) {
21+
stack.hurtAndBreak(1, user, it -> {
22+
it.broadcastBreakEvent(EquipmentSlot.MAINHAND);
23+
});
24+
}
25+
26+
return true;
27+
}
28+
29+
@Override
30+
public float getDestroySpeed(ItemStack stack, BlockState state) {
31+
return isCorrectToolForDrops(stack, state) ? 32F : 3F;
32+
}
33+
34+
@Override
35+
public boolean isCorrectToolForDrops(BlockState state) {
36+
return state.is(MINEABLE_WITH_SCRIBE);
37+
}
38+
39+
}

src/main/java/galena/oreganized/data/OBlockTags.java

+8
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import static galena.oreganized.index.OTags.Blocks.CRYSTAL_GLASS_PANES;
2121
import static galena.oreganized.index.OTags.Blocks.FIRE_SOURCE;
2222
import static galena.oreganized.index.OTags.Blocks.MELTS_LEAD;
23+
import static galena.oreganized.index.OTags.Blocks.MINEABLE_WITH_SCRIBE;
2324
import static galena.oreganized.index.OTags.Blocks.ORES_LEAD;
2425
import static galena.oreganized.index.OTags.Blocks.ORES_SILVER;
2526
import static galena.oreganized.index.OTags.Blocks.STONE_TYPES_GLANCE;
@@ -40,6 +41,7 @@ public OBlockTags(PackOutput output, CompletableFuture<HolderLookup.Provider> fu
4041
return "Oreganized Block Tags";
4142
}
4243

44+
@SuppressWarnings("unchecked")
4345
@Override
4446
protected void addTags(HolderLookup.Provider provider) {
4547
// Oreganized
@@ -163,5 +165,11 @@ protected void addTags(HolderLookup.Provider provider) {
163165
.add(Blocks.MAGMA_BLOCK)
164166
.addTags(BlockTags.CAMPFIRES)
165167
.addTags(BlockTags.FIRE);
168+
169+
tag(MINEABLE_WITH_SCRIBE)
170+
.addTags(Tags.Blocks.GLASS)
171+
.addTags(Tags.Blocks.OBSIDIAN)
172+
.addTags(BlockTags.ICE)
173+
.addTags(Tags.Blocks.STORAGE_BLOCKS_AMETHYST);
166174
}
167175
}

src/main/java/galena/oreganized/data/OItemModels.java

+1
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ protected void registerModels() {
4545
normalItem(OItems.LEAD_BOLT);
4646

4747
toolItem(OItems.BUSH_HAMMER);
48+
toolItem(OItems.SCRIBE);
4849
toolItem(OItems.ELECTRUM_SWORD);
4950
toolItem(OItems.ELECTRUM_SHOVEL);
5051
toolItem(OItems.ELECTRUM_PICKAXE);

src/main/java/galena/oreganized/data/ORecipes.java

+10
Original file line numberDiff line numberDiff line change
@@ -273,5 +273,15 @@ protected void buildRecipes(Consumer<FinishedRecipe> consumer) {
273273
.pattern("###")
274274
.unlockedBy("has_lead", has(OTags.Items.INGOTS_LEAD))
275275
.save(consumer);
276+
277+
ShapedRecipeBuilder.shaped(RecipeCategory.TOOLS, OItems.SCRIBE.get())
278+
.define('A', Items.AMETHYST_SHARD)
279+
.define('S', OTags.Items.INGOTS_SILVER)
280+
.pattern("A")
281+
.pattern("S")
282+
.pattern("S")
283+
.unlockedBy("has_silver", has(OTags.Items.INGOTS_SILVER))
284+
.unlockedBy("has_amethyst", has(Items.AMETHYST_SHARD))
285+
.save(consumer);
276286
}
277287
}

src/main/java/galena/oreganized/index/OItems.java

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import galena.oreganized.content.item.LeadBoltItem;
99
import galena.oreganized.content.item.MinecartShrapnelBombItem;
1010
import galena.oreganized.content.item.OSmithingTemplateItem;
11+
import galena.oreganized.content.item.ScribeItem;
1112
import galena.oreganized.content.item.SilverMirrorItem;
1213
import net.minecraft.world.entity.vehicle.AbstractMinecart;
1314
import net.minecraft.world.item.ArmorItem;
@@ -58,6 +59,7 @@ public static Supplier<? extends Item> compat(String modid, Supplier<? extends I
5859

5960
// Tools
6061
public static final RegistryObject<Item> BUSH_HAMMER = HELPER.createItem("bush_hammer", () -> new BushHammerItem(OItemTiers.LEAD, 2.5F, -2.8F, (new Item.Properties()).stacksTo(1)));
62+
public static final RegistryObject<Item> SCRIBE = HELPER.createItem("scribe", () -> new ScribeItem(new Item.Properties().stacksTo(1)));
6163

6264
public static final RegistryObject<Item> ELECTRUM_SWORD = HELPER.createItem("electrum_sword", () -> new SwordItem(OItemTiers.ELECTRUM, 3, -2.2F, (new Item.Properties())));
6365
public static final RegistryObject<Item> ELECTRUM_SHOVEL = HELPER.createItem("electrum_shovel", () -> new ShovelItem(OItemTiers.ELECTRUM, 1.5F, -2.8F, (new Item.Properties())));

src/main/java/galena/oreganized/index/OTags.java

+1
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ private static TagKey<Item> forgeTag(String name) {
6767
public static class Blocks {
6868

6969
public static final TagKey<Block> MINEABLE_WITH_BUSH_HAMMER = tag("mineable/bush_hammer");
70+
public static final TagKey<Block> MINEABLE_WITH_SCRIBE = tag("mineable/scribe");
7071
public static final TagKey<Block> ENGRAVABLE = tag("engravable");
7172
public static final TagKey<Block> ENGRAVABLE_NEEDS_PLATE = tag("engravable/needs_plate");
7273
public static final TagKey<Block> FIRE_SOURCE = tag("fire_source");
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package galena.oreganized.mixin;
2+
3+
import com.llamalad7.mixinextras.sugar.Local;
4+
import galena.oreganized.content.item.ScribeItem;
5+
import net.minecraft.world.item.ItemStack;
6+
import net.minecraft.world.item.enchantment.Enchantments;
7+
import net.minecraft.world.level.block.Block;
8+
import net.minecraft.world.level.block.state.BlockState;
9+
import net.minecraft.world.level.storage.loot.LootParams;
10+
import net.minecraft.world.level.storage.loot.parameters.LootContextParams;
11+
import org.spongepowered.asm.mixin.Mixin;
12+
import org.spongepowered.asm.mixin.injection.At;
13+
import org.spongepowered.asm.mixin.injection.ModifyVariable;
14+
15+
@Mixin(Block.class)
16+
public class BlockMixin {
17+
18+
@ModifyVariable(
19+
method = "getDrops(Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/server/level/ServerLevel;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/entity/BlockEntity;Lnet/minecraft/world/entity/Entity;Lnet/minecraft/world/item/ItemStack;)Ljava/util/List;",
20+
at = @At(value = "STORE")
21+
)
22+
private static LootParams.Builder modifyLootBuilder(LootParams.Builder builder, @Local BlockState state, @Local ItemStack stack) {
23+
if (stack.getItem() instanceof ScribeItem scribe && scribe.isCorrectToolForDrops(stack, state)) {
24+
var virtual = stack.copy();
25+
virtual.enchant(Enchantments.SILK_TOUCH, 1);
26+
return builder.withParameter(LootContextParams.TOOL, virtual);
27+
}
28+
return builder;
29+
}
30+
31+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package galena.oreganized.mixin;
2+
3+
import com.llamalad7.mixinextras.sugar.Local;
4+
import galena.oreganized.content.item.ScribeItem;
5+
import net.minecraft.world.item.ItemStack;
6+
import net.minecraft.world.item.enchantment.Enchantment;
7+
import net.minecraft.world.item.enchantment.EnchantmentHelper;
8+
import net.minecraft.world.item.enchantment.Enchantments;
9+
import net.minecraft.world.level.block.IceBlock;
10+
import net.minecraft.world.level.block.state.BlockState;
11+
import net.minecraft.world.level.storage.loot.parameters.LootContextParams;
12+
import org.spongepowered.asm.mixin.Mixin;
13+
import org.spongepowered.asm.mixin.injection.At;
14+
import org.spongepowered.asm.mixin.injection.Redirect;
15+
16+
@Mixin(IceBlock.class)
17+
public class IceBlockMixin {
18+
19+
@Redirect(
20+
method = "playerDestroy(Lnet/minecraft/world/level/Level;Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/core/BlockPos;Lnet/minecraft/world/level/block/state/BlockState;Lnet/minecraft/world/level/block/entity/BlockEntity;Lnet/minecraft/world/item/ItemStack;)V",
21+
at = @At(value = "INVOKE", target = "Lnet/minecraft/world/item/enchantment/EnchantmentHelper;getItemEnchantmentLevel(Lnet/minecraft/world/item/enchantment/Enchantment;Lnet/minecraft/world/item/ItemStack;)I")
22+
)
23+
private int modifyLootBuilder(Enchantment enchantment, ItemStack stack, @Local BlockState state) {
24+
if (stack.getItem() instanceof ScribeItem scribe && scribe.isCorrectToolForDrops(stack, state)) {
25+
return 1;
26+
}
27+
return EnchantmentHelper.getItemEnchantmentLevel(Enchantments.SILK_TOUCH, stack);
28+
}
29+
30+
}
Loading

src/main/resources/oreganized.mixins.json

+3-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
"minVersion": "0.8",
44
"package": "galena.oreganized.mixin",
55
"compatibilityLevel": "JAVA_17",
6-
"mixins": ["AbstractArrowMixin", "CrossbowMixin", "DispenserBlockMixin", "PlayerMixin"],
6+
"mixins": [
7+
"AbstractArrowMixin", "BlockMixin", "CrossbowMixin", "DispenserBlockMixin", "IceBlockMixin", "PlayerMixin"
8+
],
79
"client": [
810
"client.HumanoidArmorLayerAccessor", "client.HumanoidArmorLayerMixin"
911
],

0 commit comments

Comments
 (0)