Update to 24w40a

This commit is contained in:
shedaniel
2024-10-06 05:07:39 +08:00
parent a14036d12b
commit fe43bbddc9
73 changed files with 377 additions and 838 deletions

View File

@@ -45,20 +45,12 @@ import dev.architectury.utils.EnvExecutor;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.client.renderer.entity.CowRenderer;
import net.minecraft.core.component.DataComponents;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.core.registries.Registries;
import net.minecraft.data.registries.VanillaRegistries;
import net.minecraft.world.item.CreativeModeTabs;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.minecraft.world.item.enchantment.Enchantments;
import net.minecraft.world.item.enchantment.ItemEnchantments;
import net.minecraft.world.level.block.Blocks;
import java.util.Collections;
import java.util.List;
public class TestMod {
public static final MessageSink SINK = EnvExecutor.getEnvSpecific(() -> ClientOverlayMessageSink::new, () -> ConsoleMessageSink::new);
public static final String MOD_ID = "architectury_test";
@@ -75,7 +67,7 @@ public class TestMod {
TestLoot.init();
TestWorldGeneration.initialize();
EnvExecutor.runInEnv(Env.CLIENT, () -> TestMod.Client::initializeClient);
CreativeTabRegistry.modifyBuiltin(BuiltInRegistries.CREATIVE_MODE_TAB.get(CreativeModeTabs.BUILDING_BLOCKS), (flags, output, canUseGameMasterBlocks) -> {
CreativeTabRegistry.modifyBuiltin(BuiltInRegistries.CREATIVE_MODE_TAB.getValue(CreativeModeTabs.BUILDING_BLOCKS), (flags, output, canUseGameMasterBlocks) -> {
ItemStack sword = Items.DIAMOND_SWORD.getDefaultInstance();
output.acceptBefore(new ItemStack(Items.OAK_WOOD), sword);
output.acceptAfter(Blocks.STRIPPED_OAK_LOG, Items.BEDROCK);

View File

@@ -20,14 +20,15 @@
package dev.architectury.test.entity;
import com.google.common.base.Suppliers;
import dev.architectury.injectables.targets.ArchitecturyTarget;
import dev.architectury.networking.NetworkManager;
import dev.architectury.test.TestMod;
import io.netty.buffer.Unpooled;
import net.minecraft.core.registries.Registries;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.network.RegistryFriendlyByteBuf;
import net.minecraft.network.protocol.Packet;
import net.minecraft.network.protocol.game.ClientGamePacketListener;
import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerEntity;
import net.minecraft.server.level.ServerPlayer;
@@ -39,8 +40,8 @@ import net.minecraft.world.level.Level;
import java.util.function.Supplier;
public class TestEntity extends Cow {
public static final Supplier<EntityType<TestEntity>> TYPE = Suppliers.memoize(() -> EntityType.Builder.of(TestEntity::new, MobCategory.MISC).sized(0.98F, 0.7F).clientTrackingRange(8).build("test_entity"));
public static final Supplier<EntityType<TestEntity>> TYPE_2 = Suppliers.memoize(() -> EntityType.Builder.of(TestEntity::new, MobCategory.MISC).sized(0.98F, 0.7F).clientTrackingRange(8).build("test_entity_2"));
public static final Supplier<EntityType<TestEntity>> TYPE = Suppliers.memoize(() -> EntityType.Builder.of(TestEntity::new, MobCategory.MISC).sized(0.98F, 0.7F).clientTrackingRange(8).build(ResourceKey.create(Registries.ENTITY_TYPE, ResourceLocation.fromNamespaceAndPath(TestMod.MOD_ID, "test_entity"))));
public static final Supplier<EntityType<TestEntity>> TYPE_2 = Suppliers.memoize(() -> EntityType.Builder.of(TestEntity::new, MobCategory.MISC).sized(0.98F, 0.7F).clientTrackingRange(8).build(ResourceKey.create(Registries.ENTITY_TYPE, ResourceLocation.fromNamespaceAndPath(TestMod.MOD_ID, "test_entity_2"))));
public TestEntity(EntityType<? extends Cow> entityType, Level level) {
super(entityType, level);

View File

@@ -24,7 +24,6 @@ import dev.architectury.event.CompoundEventResult;
import dev.architectury.event.EventResult;
import dev.architectury.event.events.client.*;
import dev.architectury.event.events.common.*;
import dev.architectury.hooks.level.ExplosionHooks;
import dev.architectury.platform.Platform;
import dev.architectury.test.TestMod;
import dev.architectury.utils.Env;
@@ -37,6 +36,7 @@ import net.minecraft.core.Position;
import net.minecraft.core.Vec3i;
import net.minecraft.network.chat.Component;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResult;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.entity.player.Player;
@@ -134,19 +134,19 @@ public class DebugEvents {
return EventResult.pass();
}));
ExplosionEvent.DETONATE.register((world, explosion, affectedEntities) -> {
TestMod.SINK.accept(world.dimension().location() + " explodes at " + toShortString(ExplosionHooks.getPosition(explosion)) + logSide(world));
TestMod.SINK.accept(world.dimension().location() + " explodes at " + toShortString(explosion.center()) + logSide(world));
});
InteractionEvent.LEFT_CLICK_BLOCK.register((player, hand, pos, face) -> {
TestMod.SINK.accept(player.getScoreboardName() + " left clicks " + toShortString(pos) + logSide(player.level()));
return EventResult.pass();
return InteractionResult.PASS;
});
InteractionEvent.RIGHT_CLICK_BLOCK.register((player, hand, pos, face) -> {
TestMod.SINK.accept(player.getScoreboardName() + " right clicks " + toShortString(pos) + logSide(player.level()));
return EventResult.pass();
return InteractionResult.PASS;
});
InteractionEvent.RIGHT_CLICK_ITEM.register((player, hand) -> {
TestMod.SINK.accept(player.getScoreboardName() + " uses " + (hand == InteractionHand.MAIN_HAND ? "main hand" : "off hand") + logSide(player.level()));
return CompoundEventResult.pass();
return InteractionResult.PASS;
});
InteractionEvent.INTERACT_ENTITY.register((player, entity, hand) -> {
TestMod.SINK.accept(player.getScoreboardName() + " interacts with " + entity.getScoreboardName() + " using " + (hand == InteractionHand.MAIN_HAND ? "main hand" : "off hand") + logSide(player.level()));
@@ -154,10 +154,10 @@ public class DebugEvents {
});
InteractionEvent.FARMLAND_TRAMPLE.register((level, pos, state, distance, entity) -> {
if (entity instanceof Player && ((Player) entity).getItemBySlot(EquipmentSlot.FEET).getItem() == Items.DIAMOND_BOOTS) {
return EventResult.interrupt(false);
return InteractionResult.FAIL;
}
TestMod.SINK.accept("%s trampled farmland (%s) at %s in %s (Fall height: %f blocks)", entity, state, pos, level, distance);
return EventResult.pass();
return InteractionResult.PASS;
});
LifecycleEvent.SERVER_BEFORE_START.register(instance -> {
TestMod.SINK.accept("Server ready to start");
@@ -201,16 +201,16 @@ public class DebugEvents {
TestMod.SINK.accept(player.getScoreboardName() + " was awarded with %s" + logSide(player.level()), Advancement.name(advancement));
});
PlayerEvent.CRAFT_ITEM.register((player, constructed, inventory) -> {
TestMod.SINK.accept(player.getScoreboardName() + " crafts " + Component.translatable(constructed.getDescriptionId()).getString() + logSide(player.level()));
TestMod.SINK.accept(player.getScoreboardName() + " crafts " + Component.translatable(constructed.getItem().getDescriptionId()).getString() + logSide(player.level()));
});
PlayerEvent.SMELT_ITEM.register((player, smelted) -> {
TestMod.SINK.accept(player.getScoreboardName() + " smelts " + Component.translatable(smelted.getDescriptionId()).getString() + logSide(player.level()));
TestMod.SINK.accept(player.getScoreboardName() + " smelts " + Component.translatable(smelted.getItem().getDescriptionId()).getString() + logSide(player.level()));
});
PlayerEvent.PICKUP_ITEM_POST.register((player, entity, stack) -> {
TestMod.SINK.accept(player.getScoreboardName() + " picks up " + Component.translatable(stack.getDescriptionId()).getString() + logSide(player.level()));
TestMod.SINK.accept(player.getScoreboardName() + " picks up " + Component.translatable(stack.getItem().getDescriptionId()).getString() + logSide(player.level()));
});
PlayerEvent.DROP_ITEM.register((player, entity) -> {
TestMod.SINK.accept(player.getScoreboardName() + " drops " + Component.translatable(entity.getItem().getDescriptionId()).getString() + logSide(player.level()));
TestMod.SINK.accept(player.getScoreboardName() + " drops " + Component.translatable(entity.getItem().getItem().getDescriptionId()).getString() + logSide(player.level()));
return EventResult.pass();
});
PlayerEvent.OPEN_MENU.register((player, menu) -> {
@@ -224,15 +224,15 @@ public class DebugEvents {
});
PlayerEvent.FILL_BUCKET.register(((player, level, stack, target) -> {
TestMod.SINK.accept("%s used a bucket (%s) in %s%s while looking at %s", player.getScoreboardName(), stack, level.dimension().location(), logSide(level), target == null ? "nothing" : target.getLocation());
return CompoundEventResult.pass();
return InteractionResult.PASS;
}));
LightningEvent.STRIKE.register((bolt, level, pos, toStrike) -> {
TestMod.SINK.accept(bolt.getScoreboardName() + " struck at " + toShortString(pos) + logSide(level));
});
ChunkEvent.LOAD_DATA.register((chunk, level, nbt) -> {
ChunkEvent.LOAD_DATA.register((chunk, level) -> {
// TestMod.SINK.accept("Chunk loaded at x=" + chunk.getPos().x + ", z=" + chunk.getPos().z + " in dimension '" + level.dimension().location() + "'");
});
ChunkEvent.SAVE_DATA.register((chunk, level, nbt) -> {
ChunkEvent.SAVE_DATA.register((chunk, level) -> {
// TestMod.SINK.accept("Chunk saved at x=" + chunk.getPos().x + ", z=" + chunk.getPos().z + " in dimension '" + level.dimension().location() + "'");
});
}
@@ -359,11 +359,6 @@ public class DebugEvents {
TestMod.SINK.accept("Screen has been changed to " + toSimpleName(screen));
return CompoundEventResult.pass();
});
ClientTooltipEvent.RENDER_MODIFY_COLOR.register((matrices, x, y, context) -> {
context.setBackgroundColor(0xf0ffeded);
context.setOutlineGradientTopColor(0xf0ff5c5c);
context.setOutlineGradientBottomColor(0xf0f74d4d);
});
}
private static String chunkPos(int x, int z) {

View File

@@ -41,7 +41,7 @@ public final class TestBlockInteractions {
if (!ctx.getLevel().isClientSide) {
Player player = ctx.getPlayer();
if (player != null)
player.sendSystemMessage(Component.literal("Thou has successfully committed the dark arts of alchemy!!"));
player.displayClientMessage(Component.literal("Thou has successfully committed the dark arts of alchemy!!"), false);
}
}, ctx -> {
return Blocks.DIAMOND_BLOCK.defaultBlockState();

View File

@@ -51,6 +51,6 @@ public class ButtonClickedMessage extends BaseC2SMessage {
@Override
public void handle(NetworkManager.PacketContext context) {
context.getPlayer().sendSystemMessage(Component.literal("You clicked button #" + buttonId));
context.getPlayer().displayClientMessage(Component.literal("You clicked button #" + buttonId), false);
}
}

View File

@@ -54,6 +54,6 @@ public class SyncDataMessage extends BaseS2CMessage {
@Override
public void handle(NetworkManager.PacketContext context) {
context.getPlayer().sendSystemMessage(Component.literal("Received data from server: " + serverData));
context.getPlayer().displayClientMessage(Component.literal("Received data from server: " + serverData), false);
}
}

View File

@@ -22,7 +22,6 @@ package dev.architectury.test.registry;
import dev.architectury.core.fluid.ArchitecturyFluidAttributes;
import dev.architectury.core.fluid.SimpleArchitecturyFluidAttributes;
import dev.architectury.core.item.ArchitecturySpawnEggItem;
import dev.architectury.hooks.item.food.FoodPropertiesHooks;
import dev.architectury.hooks.level.entity.EntityHooks;
import dev.architectury.platform.Platform;
import dev.architectury.registry.CreativeTabRegistry;
@@ -37,8 +36,10 @@ import dev.architectury.test.recipes.TestRecipeSerializer;
import dev.architectury.test.registry.objects.EquippableTickingItem;
import dev.architectury.test.registry.objects.ItemWithTooltip;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Registry;
import net.minecraft.core.registries.Registries;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.effect.MobEffect;
import net.minecraft.world.effect.MobEffectCategory;
@@ -49,6 +50,8 @@ import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.component.Consumables;
import net.minecraft.world.item.consume_effects.ApplyStatusEffectsConsumeEffect;
import net.minecraft.world.item.crafting.CustomRecipe;
import net.minecraft.world.item.crafting.RecipeSerializer;
import net.minecraft.world.item.crafting.RecipeType;
@@ -64,6 +67,7 @@ import net.minecraft.world.phys.shapes.CollisionContext;
import net.minecraft.world.phys.shapes.VoxelShape;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
import java.util.function.Supplier;
import static dev.architectury.test.TestMod.SINK;
@@ -109,27 +113,32 @@ public class TestRegistries {
});
public static final RegistrySupplier<Item> TEST_ITEM = ITEMS.register("test_item", () ->
new Item(new Item.Properties().arch$tab(TestRegistries.TEST_TAB)));
new Item(new Item.Properties().arch$tab(TestRegistries.TEST_TAB).setId(id(Registries.ITEM, "test_item"))));
public static final RegistrySupplier<Item> TEST_EQUIPPABLE = ITEMS.register("test_eqippable", () ->
new EquippableTickingItem(new Item.Properties().arch$tab(TestRegistries.TEST_TAB)));
new EquippableTickingItem(new Item.Properties().arch$tab(TestRegistries.TEST_TAB).setId(id(Registries.ITEM, "test_eqippable"))));
public static final RegistrySupplier<Item> TEST_EDIBLE = ITEMS.register("test_edible", () -> {
FoodProperties.Builder fpBuilder = new FoodProperties.Builder().nutrition(8).saturationModifier(0.8F);
FoodPropertiesHooks.effect(fpBuilder, () -> new MobEffectInstance(TEST_EFFECT, 100), 1);
return new Item(new Item.Properties().food(fpBuilder.build()).arch$tab(TestRegistries.TEST_TAB));
return new Item(new Item.Properties()
.food(new FoodProperties.Builder().nutrition(8).saturationModifier(0.8F).build(),
Consumables.defaultFood()
.onConsume(
new ApplyStatusEffectsConsumeEffect(List.of(new MobEffectInstance(TEST_EFFECT, 100, 1)))
).build())
.arch$tab(TestRegistries.TEST_TAB)
.setId(id(Registries.ITEM, "test_edible")));
});
public static final RegistrySupplier<Item> TEST_SPAWN_EGG = ITEMS.register("test_spawn_egg", () ->
new ArchitecturySpawnEggItem(TestRegistries.TEST_ENTITY, 0xFF000000, 0xFFFFFFFF,
new Item.Properties().arch$tab(TestRegistries.TEST_TAB)));
new Item.Properties().arch$tab(TestRegistries.TEST_TAB).setId(id(Registries.ITEM, "test_spawn_egg"))));
public static final RegistrySupplier<Item> TEST_SPAWN_EGG_2 = ITEMS.register("test_spawn_egg_2", () ->
new ArchitecturySpawnEggItem(TestRegistries.TEST_ENTITY_2, 0xFFFFFFFF, 0xFF000000,
new Item.Properties().arch$tab(TestRegistries.TEST_TAB)));
new Item.Properties().arch$tab(TestRegistries.TEST_TAB).setId(id(Registries.ITEM, "test_spawn_egg_2"))));
public static final RegistrySupplier<Item> TEST_FLUID_BUCKET = ITEMS.register("test_fluid_bucket", () -> {
try {
// In example mod the forge class isn't being replaced, this is not required in mods depending on architectury
return (Item) Class.forName(!Platform.isForge() ? "dev.architectury.core.item.ArchitecturyBucketItem" : "dev.architectury.core.item.forge.imitator.ArchitecturyBucketItem")
.getDeclaredConstructor(Supplier.class, Item.Properties.class)
.newInstance(TestRegistries.TEST_FLUID, new Item.Properties().arch$tab(TestRegistries.TEST_TAB));
.newInstance(TestRegistries.TEST_FLUID, new Item.Properties().arch$tab(TestRegistries.TEST_TAB).setId(id(Registries.ITEM, "test_fluid_bucket")));
} catch (InstantiationException | ClassNotFoundException | NoSuchMethodException | InvocationTargetException |
IllegalAccessException e) {
throw new RuntimeException(e);
@@ -137,12 +146,12 @@ public class TestRegistries {
});
public static final RegistrySupplier<ItemWithTooltip> TEST_TOOLTIP = ITEMS.register("test_tooltip",
() -> new ItemWithTooltip(new Item.Properties().arch$tab(TestRegistries.TEST_TAB)));
() -> new ItemWithTooltip(new Item.Properties().arch$tab(TestRegistries.TEST_TAB).setId(id(Registries.ITEM, "test_tooltip"))));
public static final RegistrySupplier<Block> TEST_BLOCK = BLOCKS.register("test_block", () ->
new Block(BlockBehaviour.Properties.ofLegacyCopy(Blocks.STONE)));
new Block(BlockBehaviour.Properties.ofLegacyCopy(Blocks.STONE).setId(id(Registries.BLOCK, "test_block"))));
public static final RegistrySupplier<Block> COLLISION_BLOCK = BLOCKS.register("collision_block", () ->
new Block(BlockBehaviour.Properties.ofLegacyCopy(Blocks.STONE)) {
new Block(BlockBehaviour.Properties.ofLegacyCopy(Blocks.STONE).setId(id(Registries.BLOCK, "collision_block"))) {
@Override
public VoxelShape getCollisionShape(BlockState state, BlockGetter bg, BlockPos pos, CollisionContext ctx) {
SINK.accept(EntityHooks.fromCollision(ctx) + " is colliding with " + state);
@@ -155,7 +164,7 @@ public class TestRegistries {
// In example mod the forge class isn't being replaced, this is not required in mods depending on architectury
return (LiquidBlock) Class.forName(!Platform.isForge() ? "dev.architectury.core.block.ArchitecturyLiquidBlock" : "dev.architectury.core.block.forge.imitator.ArchitecturyLiquidBlock")
.getDeclaredConstructor(Supplier.class, BlockBehaviour.Properties.class)
.newInstance(TestRegistries.TEST_FLUID, BlockBehaviour.Properties.ofLegacyCopy(Blocks.WATER).noCollission().strength(100.0F).noLootTable());
.newInstance(TestRegistries.TEST_FLUID, BlockBehaviour.Properties.ofLegacyCopy(Blocks.WATER).noCollission().strength(100.0F).noLootTable().setId(id(Registries.BLOCK, "test_fluid")));
} catch (InstantiationException | ClassNotFoundException | NoSuchMethodException | InvocationTargetException |
IllegalAccessException e) {
throw new RuntimeException(e);
@@ -187,9 +196,9 @@ public class TestRegistries {
});
public static final RegistrySupplier<Item> TEST_BLOCK_ITEM = ITEMS.register("test_block", () ->
new BlockItem(TEST_BLOCK.get(), new Item.Properties().arch$tab(TestRegistries.TEST_TAB)));
new BlockItem(TEST_BLOCK.get(), new Item.Properties().arch$tab(TestRegistries.TEST_TAB).setId(id(Registries.ITEM, "test_block"))));
public static final RegistrySupplier<Item> COLLISION_BLOCK_ITEM = ITEMS.register("collision_block", () ->
new BlockItem(COLLISION_BLOCK.get(), new Item.Properties().arch$tab(TestRegistries.TEST_TAB)));
new BlockItem(COLLISION_BLOCK.get(), new Item.Properties().arch$tab(TestRegistries.TEST_TAB).setId(id(Registries.ITEM, "collision_block"))));
public static final RegistrySupplier<EntityType<TestEntity>> TEST_ENTITY = ENTITY_TYPES.register("test_entity", TestEntity.TYPE);
public static final RegistrySupplier<EntityType<TestEntity>> TEST_ENTITY_2 = ENTITY_TYPES.register("test_entity_2", TestEntity.TYPE_2);
@@ -224,4 +233,8 @@ public class TestRegistries {
System.out.println("Registered recipe type!");
});
}
private static <T> ResourceKey<T> id(ResourceKey<Registry<T>> key, String string) {
return ResourceKey.create(key, ResourceLocation.fromNamespaceAndPath(TestMod.MOD_ID, string));
}
}

View File

@@ -35,7 +35,7 @@ public class EquippableTickingItem extends Item implements ItemExtension {
@Override
public void tickArmor(ItemStack stack, Player player) {
TestMod.SINK.accept("Ticking " + Component.translatable(stack.getDescriptionId()).getString());
TestMod.SINK.accept("Ticking " + Component.translatable(stack.getItem().getDescriptionId()).getString());
}
@Nullable

View File

@@ -42,13 +42,13 @@ public class ItemWithTooltip extends Item {
}
public record MyTooltipComponent(int count) implements TooltipComponent {
}
@Environment(EnvType.CLIENT)
public record MyClientTooltipComponent(MyTooltipComponent component) implements ClientTooltipComponent {
@Override
public int getHeight() {
public int getHeight(Font font) {
return 100;
}
@@ -58,10 +58,10 @@ public class ItemWithTooltip extends Item {
}
@Override
public void renderImage(Font font, int x, int y, GuiGraphics graphics) {
public void renderImage(Font font, int x, int y, int w, int h, GuiGraphics graphics) {
graphics.pose().pushPose();
graphics.pose().translate(0, 0, 400);
graphics.drawString(font, "Count: " + component.count, x + getWidth(font) / 2, y + (getHeight() - font.lineHeight) / 2, 0xFF00FF00);
graphics.drawString(font, "Count: " + component.count, x + getWidth(font) / 2, y + (getHeight(font) - font.lineHeight) / 2, 0xFF00FF00);
graphics.pose().popPose();
}
}

View File

@@ -18,9 +18,6 @@
"net/minecraft/class_1755": [
"dev/architectury/extensions/injected/InjectedBucketItemExtension"
],
"net/minecraft/class_4174$class_4175": [
"dev/architectury/extensions/injected/InjectedFoodPropertiesBuilderExtension"
],
"net/minecraft/class_2404": [
"dev/architectury/extensions/injected/InjectedLiquidBlockExtension"
]