added lang files and small tweaks

This commit is contained in:
ItsBlackGear 2022-08-26 15:17:13 -04:00
parent f50eacb1e0
commit c7693efb0f
17 changed files with 260 additions and 237 deletions

View file

@ -1,9 +1,9 @@
package com.cursedcauldron.wildbackport.common.entities;
import com.cursedcauldron.wildbackport.client.registry.WBSoundEvents;
import com.cursedcauldron.wildbackport.common.entities.access.Vibration;
import com.cursedcauldron.wildbackport.common.entities.brain.AllayBrain;
import com.cursedcauldron.wildbackport.common.entities.warden.MobPositionSource;
import com.cursedcauldron.wildbackport.common.entities.warden.VibrationHandler;
import com.cursedcauldron.wildbackport.common.registry.WBGameEvents;
import com.cursedcauldron.wildbackport.common.registry.entity.WBMemoryModules;
import com.cursedcauldron.wildbackport.common.tag.WBGameEventTags;
@ -16,6 +16,7 @@ import net.minecraft.network.protocol.game.DebugPackets;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.sounds.SoundEvent;
import net.minecraft.sounds.SoundSource;
import net.minecraft.tags.TagKey;
import net.minecraft.util.Mth;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResult;
@ -51,7 +52,6 @@ import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.gameevent.GameEvent;
import net.minecraft.world.level.gameevent.GameEventListener;
import net.minecraft.world.level.gameevent.GameEventListenerRegistrar;
import net.minecraft.world.level.gameevent.vibrations.VibrationListener;
import net.minecraft.world.phys.AABB;
import net.minecraft.world.phys.Vec3;
import org.jetbrains.annotations.Nullable;
@ -66,8 +66,8 @@ public class Allay extends PathfinderMob implements InventoryCarrier {
protected static final ImmutableList<? extends SensorType<? extends Sensor<? super Allay>>> SENSORS = ImmutableList.of(SensorType.NEAREST_LIVING_ENTITIES, SensorType.NEAREST_PLAYERS, SensorType.HURT_BY, SensorType.NEAREST_ITEMS);
protected static final ImmutableList<MemoryModuleType<?>> MEMORIES = ImmutableList.of(MemoryModuleType.PATH, MemoryModuleType.LOOK_TARGET, MemoryModuleType.NEAREST_VISIBLE_LIVING_ENTITIES, MemoryModuleType.WALK_TARGET, MemoryModuleType.CANT_REACH_WALK_TARGET_SINCE, MemoryModuleType.HURT_BY, MemoryModuleType.NEAREST_VISIBLE_WANTED_ITEM, WBMemoryModules.LIKED_PLAYER.get(), WBMemoryModules.LIKED_NOTEBLOCK.get(), WBMemoryModules.LIKED_NOTEBLOCK_COOLDOWN_TICKS.get(), WBMemoryModules.ITEM_PICKUP_COOLDOWN_TICKS.get());
public static final ImmutableList<Float> THROW_SOUND_PITCHES = ImmutableList.of(0.5625F, 0.625F, 0.75F, 0.9375F, 1.0F, 1.0F, 1.125F, 1.25F, 1.5F, 1.875F, 2.0F, 2.25F, 2.5F, 3.0F, 3.75F, 4.0F);
// private final GameEventListenerRegistrar registrar;
// private final VibrationListener listener;
private final VibrationHandler listener = new VibrationHandler(new MobPositionSource(this, this.getEyeHeight()), 16, new VibrationListenerCallback());
private final GameEventListenerRegistrar registrar = new GameEventListenerRegistrar(this.listener);
private final SimpleContainer inventory = new SimpleContainer(1);
private float holdingTicks;
private float holdingTicksOld;
@ -76,14 +76,6 @@ public class Allay extends PathfinderMob implements InventoryCarrier {
super(type, level);
this.moveControl = new FlyingMoveControl(this, 20, true);
this.setCanPickUpLoot(this.canPickUpLoot());
// this.listener = new VibrationListener(new MobPositionSource(this, this.getEyeHeight()), 16, new VibrationListenerCallback()) {
// @Override
// public boolean handleGameEvent(Level level, GameEvent event, @Nullable Entity entity, BlockPos pos) {
// boolean flag = super.handleGameEvent(level, event, entity, pos);
// return flag || event.is(WBGameEventTags.ALLAY_CAN_LISTEN);
// }
// };
// this.registrar = new GameEventListenerRegistrar(this.listener);
}
@Override
@ -218,7 +210,7 @@ public class Allay extends PathfinderMob implements InventoryCarrier {
this.holdingTicks = Mth.clamp(this.holdingTicks - 1.0F, 0.0F, 5.0F);
}
} else {
// this.listener.tick(this.level);
this.listener.tick(this.level);
}
}
@ -272,8 +264,8 @@ public class Allay extends PathfinderMob implements InventoryCarrier {
@Override
public boolean wantsToPickUp(ItemStack stack) {
ItemStack allayStack = this.getItemInHand(InteractionHand.MAIN_HAND);
return !allayStack.isEmpty() && allayStack.sameItemStackIgnoreDurability(stack) && this.inventory.canAddItem(stack);
ItemStack heldItem = this.getItemInHand(InteractionHand.MAIN_HAND);
return !heldItem.isEmpty() && heldItem.sameItemStackIgnoreDurability(stack) && this.inventory.canAddItem(stack);
}
@Override
@ -306,10 +298,10 @@ public class Allay extends PathfinderMob implements InventoryCarrier {
return !this.isOnGround();
}
// @Override @Nullable
// public GameEventListenerRegistrar getGameEventListenerRegistrar() {
// return this.registrar;
// }
@Override @Nullable
public GameEventListenerRegistrar getGameEventListenerRegistrar() {
return this.registrar;
}
public float getHoldingItemAnimationProgress(float animationProgress) {
return Mth.lerp(animationProgress, this.holdingTicksOld, this.holdingTicks) / 5.0F;
@ -359,27 +351,26 @@ public class Allay extends PathfinderMob implements InventoryCarrier {
return new Vec3(0.0D, this.getEyeHeight() * 0.6D, this.getBbWidth() * 0.1D);
}
// class VibrationListenerCallback implements VibrationListener.VibrationListenerConfig {
// @Override
// public void onSignalReceive(Level level, GameEventListener listener, GameEvent event, int distance) {
// Vibration.Instance instance = Vibration.Instance.of(Allay.this.listener);
// if (event == WBGameEvents.NOTE_BLOCK_PLAY.get()) {
// AllayBrain.rememberNoteBlock(Allay.this, new BlockPos(instance.getPos()));
// }
// }
//
// @Override
// public boolean shouldListen(Level level, GameEventListener listener, BlockPos pos, GameEvent event, @Nullable Entity entity) {
// if (Allay.this.getLevel() != level || Allay.this.isRemoved() || Allay.this.isNoAi()) {
// return false;
// } else {
// Optional<GlobalPos> position = Allay.this.getBrain().getMemory(WBMemoryModules.LIKED_NOTEBLOCK.get());
// if (position.isEmpty()) {
// return true;
// } else {
// return position.get().dimension().equals(level.dimension()) && position.get().pos().equals(pos);
// }
// }
// }
// }
//TODO: check why the allay is not detecting note blocks
class VibrationListenerCallback implements VibrationHandler.VibrationConfig {
@Override
public boolean shouldListen(ServerLevel level, GameEventListener listener, BlockPos pos, GameEvent event, @Nullable Entity entity) {
if (Allay.this.getLevel() != level || Allay.this.isRemoved() || Allay.this.isNoAi()) {
return false;
} else {
Optional<GlobalPos> position = Allay.this.getBrain().getMemory(WBMemoryModules.LIKED_NOTEBLOCK.get());
return position.isEmpty() || position.get().dimension().equals(level.dimension()) && position.get().pos().equals(pos);
}
}
@Override
public void onSignalReceive(ServerLevel level, GameEventListener listener, BlockPos pos, GameEvent event, @Nullable Entity entity, @Nullable Entity source, float distance) {
if (event == WBGameEvents.NOTE_BLOCK_PLAY.get()) AllayBrain.rememberNoteBlock(Allay.this, new BlockPos(pos));
}
@Override
public TagKey<GameEvent> getListenableEvents() {
return WBGameEventTags.ALLAY_CAN_LISTEN;
}
}
}

View file

@ -67,11 +67,11 @@ public class AllayBrain {
public static void rememberNoteBlock(LivingEntity entity, BlockPos pos) {
Brain<?> brain = entity.getBrain();
GlobalPos globalPos = GlobalPos.of(entity.getLevel().dimension(), pos);
Optional<GlobalPos> likedNoteBlock = brain.getMemory(WBMemoryModules.LIKED_NOTEBLOCK.get());
if (likedNoteBlock.isEmpty()) {
Optional<GlobalPos> noteblock = brain.getMemory(WBMemoryModules.LIKED_NOTEBLOCK.get());
if (noteblock.isEmpty()) {
brain.setMemory(WBMemoryModules.LIKED_NOTEBLOCK.get(), globalPos);
brain.setMemory(WBMemoryModules.LIKED_NOTEBLOCK_COOLDOWN_TICKS.get(), 600);
} else if (likedNoteBlock.get().equals(globalPos)) {
} else if (noteblock.get().equals(globalPos)) {
brain.setMemory(WBMemoryModules.LIKED_NOTEBLOCK_COOLDOWN_TICKS.get(), 600);
}
}

View file

@ -0,0 +1,23 @@
package com.cursedcauldron.wildbackport.core.mixin.common;
import com.cursedcauldron.wildbackport.common.registry.entity.WBMemoryModules;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.ai.behavior.GoToWantedItem;
import net.minecraft.world.entity.ai.memory.MemoryStatus;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
@Mixin(GoToWantedItem.class)
public class GoToWantedItemMixin<E extends LivingEntity> {
@Inject(method = "checkExtraStartConditions", at = @At("TAIL"), cancellable = true)
private void wb$checkExtraConditions(ServerLevel level, E entity, CallbackInfoReturnable<Boolean> cir) {
cir.setReturnValue(!this.isInPickupCooldown(entity) && cir.getReturnValue());
}
private boolean isInPickupCooldown(E entity) {
return entity.getBrain().checkMemory(WBMemoryModules.ITEM_PICKUP_COOLDOWN_TICKS.get(), MemoryStatus.VALUE_PRESENT);
}
}

View file

@ -1,45 +0,0 @@
package com.cursedcauldron.wildbackport.core.mixin.common.event;
import com.cursedcauldron.wildbackport.common.entities.access.Listener;
import net.minecraft.core.SectionPos;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.gameevent.GameEventDispatcher;
import net.minecraft.world.level.gameevent.GameEventListener;
import net.minecraft.world.level.gameevent.GameEventListenerRegistrar;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Mutable;
import org.spongepowered.asm.mixin.Shadow;
import java.util.function.Consumer;
@Mixin(GameEventListenerRegistrar.class)
public abstract class GameEventListenerRegistrarMixin implements Listener.Instance {
@Mutable
@Shadow @Final private GameEventListener listener;
@Shadow protected abstract void ifEventDispatcherExists(Level level, @Nullable SectionPos sectionPos, Consumer<GameEventDispatcher> consumer);
@Shadow @Nullable private SectionPos sectionPos;
@Shadow public abstract void onListenerMove(Level level);
@Override
public void onPosCallback(Level level) {
this.onListenerMove(level);
}
@Override
public void setListener(GameEventListener listener, @Nullable Level level) {
if (this.listener == listener) return;
this.ifEventDispatcherExists(level, this.sectionPos, dispatcher -> dispatcher.unregister(this.listener));
this.ifEventDispatcherExists(level, this.sectionPos, dispatcher -> dispatcher.register(this.listener));
this.listener = listener;
}
@Override
public GameEventListener getListener() {
return this.listener;
}
}

View file

@ -1,31 +0,0 @@
package com.cursedcauldron.wildbackport.core.mixin.common.event;
import com.cursedcauldron.wildbackport.common.entities.access.Listener;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.level.gameevent.GameEventListenerRegistrar;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(ServerLevel.EntityCallbacks.class)
public abstract class ServerLevel$CallbackMixin implements Listener.Callback<Entity> {
// @Inject(method = "onTrackingStart(Lnet/minecraft/world/entity/Entity;)V", at = @At("TAIL"))
// private void wb$onTrackingStart(Entity entity, CallbackInfo ci) {
// Listener.MobInstance instance = Listener.MobInstance.of(entity);
// instance.updateEventHandler(GameEventListenerRegistrar::onListenerMove);
// }
//
// @Inject(method = "onTrackingEnd(Lnet/minecraft/world/entity/Entity;)V", at = @At("TAIL"))
// private void wb$onTrackingEnd(Entity entity, CallbackInfo ci) {
// Listener.MobInstance instance = Listener.MobInstance.of(entity);
// instance.updateEventHandler(GameEventListenerRegistrar::onListenerRemoved);
// }
//
// @Override
// public void onSectionChange(Entity entry) {
// Listener.MobInstance instance = Listener.MobInstance.of(entry);
// instance.updateEventHandler(GameEventListenerRegistrar::onListenerRemoved);
// }
}

View file

@ -1,28 +0,0 @@
package com.cursedcauldron.wildbackport.core.mixin.common.event;
import com.cursedcauldron.wildbackport.common.entities.access.Listener;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.level.entity.EntityAccess;
import net.minecraft.world.level.entity.LevelCallback;
import net.minecraft.world.level.entity.TransientEntitySectionManager;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(TransientEntitySectionManager.Callback.class)
public class TransientEntitySectionManager$CallbackMixin<T extends EntityAccess> {
@Shadow @Final TransientEntitySectionManager<T> field_27285;
@Shadow @Final private T entity;
@SuppressWarnings("unchecked")
@Inject(method = "onMove", at = @At(value = "INVOKE", shift = At.Shift.BEFORE, target = "Lnet/minecraft/world/level/entity/EntityAccess;isAlwaysTicking()Z"))
private void wb$onMove(CallbackInfo ci) {
// Listener.Callback<LevelCallback<T>> callback = Listener.Callback.of(((TransientEntitySectionManagerAccessor<T>)this.field_27285).getCallbacks());
// Listener.Callback.of(callback).onSectionChange(this.entity);
}
}

View file

@ -1,12 +0,0 @@
package com.cursedcauldron.wildbackport.core.mixin.common.event;
import net.minecraft.world.level.entity.LevelCallback;
import net.minecraft.world.level.entity.TransientEntitySectionManager;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
@Mixin(TransientEntitySectionManager.class)
public interface TransientEntitySectionManagerAccessor<T> {
@Accessor
LevelCallback<T> getCallbacks();
}

View file

@ -57,6 +57,7 @@
"item.wildbackport.music_disc_5.desc": "Samuel Åberg - 5",
"effect.wildbackport.darkness": "Darkness",
"enchantment.wildbackport.swift_sneak": "Swift Sneak",
"entity.wildbackport.allay": "Allay",
"entity.wildbackport.warden": "Warden",
"entity.wildbackport.frog": "Frog",
"entity.wildbackport.tadpole": "Tadpole",

View file

@ -0,0 +1,97 @@
{
"biome.wildbackport.deep_dark": "Profundezas sombrias",
"biome.wildbackport.mangrove_swamp": "Manguezal",
"block.wildbackport.sculk": "Sculk",
"block.wildbackport.sculk_vein": "Veio de sculk",
"block.wildbackport.sculk_catalyst": "Catalisador de sculk",
"block.wildbackport.sculk_shrieker": "Emissor de sculk",
"block.wildbackport.reinforced_deepslate": "Ardósia reforçada",
"block.wildbackport.ochre_froglight": "Anfibrilho ocre",
"block.wildbackport.verdant_froglight": "Anfibrilho verdejante",
"block.wildbackport.pearlescent_froglight": "Anfibrilho perolado",
"block.wildbackport.mangrove_log": "Tronco de mangue",
"block.wildbackport.mangrove_roots": "Raízes de mangue",
"block.wildbackport.muddy_mangrove_roots": "Raízes barrentas de mangue",
"block.wildbackport.stripped_mangrove_log": "Tronco de mangue descascado",
"block.wildbackport.stripped_mangrove_wood": "Madeira de mangue descascado",
"block.wildbackport.mangrove_leaves": "Folhas de mangue",
"block.wildbackport.mud_brick_slab": "Laje de tijolos de barro",
"block.wildbackport.mud": "Barro",
"block.wildbackport.packed_mud": "Barro seco",
"block.wildbackport.mud_bricks": "Tijolos de barro",
"block.wildbackport.mud_brick_stairs": "Escadas de tijolos de barro",
"block.wildbackport.mud_brick_wall": "Muro de tijolos de barro",
"block.wildbackport.frogspawn": "Ovos de sapo",
"block.wildbackport.mangrove_planks": "Tábuas de mangue",
"block.wildbackport.mangrove_propagule": "Propágulo de mangue",
"block.wildbackport.mangrove_door": "Porta de mangue",
"block.wildbackport.mangrove_wood": "Madeira de mangue",
"block.wildbackport.mangrove_slab": "Laje de mangue",
"block.wildbackport.mangrove_stairs": "Escadas de mangue",
"block.wildbackport.mangrove_sign": "Placa de mangue",
"block.wildbackport.mangrove_wall_sign": "Placa de mangue",
"block.wildbackport.mangrove_pressure_plate": "Placa de pressão de mangue",
"block.wildbackport.mangrove_button": "Botão de mangue",
"block.wildbackport.mangrove_fence": "Cerca de mangue",
"block.wildbackport.mangrove_fence_gate": "Portão de mangue",
"block.wildbackport.mangrove_trapdoor": "Alçapão de mangue",
"block.wildbackport.potted_mangrove_propagule": "Propágulo de mangue envasado",
"item.wildbackport.mangrove_boat": "Bote de mangue",
"item.wildbackport.oak_chest_boat": "Bote de carvalho com baú",
"item.wildbackport.spruce_chest_boat": "Bote de pinheiro com baú",
"item.wildbackport.acacia_chest_boat": "Bote de acácia com baú",
"item.wildbackport.birch_chest_boat": "Bote de bétula com baú",
"item.wildbackport.jungle_chest_boat": "Bote de madeira da selva com baú",
"item.wildbackport.dark_oak_chest_boat": "Bote de carvalho escuro com baú",
"item.wildbackport.mangrove_chest_boat": "Bote de mangue com baú",
"item.wildbackport.frog_spawn_egg": "Ovo gerador de sapo",
"item.wildbackport.tadpole_spawn_egg": "Ovo gerador de girino",
"item.wildbackport.warden_spawn_egg": "Ovo gerador de defensor",
"item.wildbackport.allay_spawn_egg": "Ovo gerador de allay",
"item.wildbackport.tadpole_bucket": "Balde com girino",
"item.wildbackport.echo_shard": "Fragmento de eco",
"item.wildbackport.recovery_compass": "Bússola de retomada",
"item.wildbackport.disc_fragment_5": "Fragmento de disco",
"item.wildbackport.disc_fragment_5.desc": "Disco musical - 5",
"item.wildbackport.music_disc_5": "Disco musical",
"item.wildbackport.music_disc_5.desc": "Samuel Åberg - 5",
"effect.wildbackport.darkness": "Escuridão",
"enchantment.wildbackport.swift_sneak": "Passos furtivos",
"entity.wildbackport.allay": "Allay",
"entity.wildbackport.warden": "Defensor",
"entity.wildbackport.frog": "Sapo",
"entity.wildbackport.tadpole": "Girino",
"entity.wildbackport.wb_boat": "Bote",
"entity.wildbackport.chest_boat": "Bote com baú",
"subtitles.entity.warden.roar": "Defensor ruge",
"subtitles.entity.warden.sniff": "Defensor fareja",
"subtitles.entity.warden.emerge": "Defensor emerge",
"subtitles.entity.warden.dig": "Defensor escava",
"subtitles.entity.warden.hurt": "Defensor ferido",
"subtitles.entity.warden.death": "Defensor morre",
"subtitles.entity.warden.step": "Passos de defensor",
"subtitles.entity.warden.listening": "Defensor ouve",
"subtitles.entity.warden.listening_angry": "Desfensor ouve furiosamente",
"subtitles.entity.warden.heartbeat": "Coração de defensor bate",
"subtitles.entity.warden.attack_impact": "Defensor golpeia",
"subtitles.entity.warden.tendril_clicks": "Gavinhas de defensor estalam",
"subtitles.entity.warden.angry": "Defensor irrita-se",
"subtitles.entity.warden.agitated": "Defensor grunhe furiosamente",
"subtitles.entity.warden.ambient": "Defensor gane",
"subtitles.entity.warden.nearby_close": "Defensor aproxima-se",
"subtitles.entity.warden.nearby_closer": "Defensor avança",
"subtitles.entity.warden.nearby_closest": "Defensor próximo",
"subtitles.entity.frog.ambient": "Sapo coaxa",
"subtitles.entity.frog.death": "Sapo morre",
"subtitles.entity.frog.eat": "Sapo come",
"subtitles.entity.frog.hurt": "Sapo ferido",
"subtitles.entity.frog.lay_spawn": "Sapo desova",
"subtitles.entity.frog.long_jump": "Sapo pula",
"commands.warden_spawn_tracker.set.success.single": "Definir avisos para %s",
"commands.warden_spawn_tracker.set.success.multiple": "Definir avisos aos %s jogadores",
"commands.warden_spawn_tracker.clear.success.single": "Avisos removidos de %s",
"commands.warden_spawn_tracker.clear.success.multiple": "Avisos removidos dos %s jogadores",
"death.attack.sonic_boom": "Um ataque sônico obliterou %1$s",
"death.attack.sonic_boom.player": "Um ataque sônico obliterou %1$s enquanto tentava fugir de %2$s",
"gamerule.doWardenSpawning": "Gerar Defensores"
}

View file

@ -0,0 +1,97 @@
{
"biome.wildbackport.deep_dark": "深淵",
"biome.wildbackport.mangrove_swamp": "紅樹林沼澤",
"block.wildbackport.sculk": "伏聆",
"block.wildbackport.sculk_vein": "伏聆脈絡",
"block.wildbackport.sculk_catalyst": "伏聆觸媒",
"block.wildbackport.sculk_shrieker": "伏聆嘯口",
"block.wildbackport.reinforced_deepslate": "強化深板岩",
"block.wildbackport.ochre_froglight": "赭黃蛙光體",
"block.wildbackport.verdant_froglight": "蒼翠蛙光體",
"block.wildbackport.pearlescent_froglight": "珠紫蛙光體",
"block.wildbackport.mangrove_log": "紅樹林木原木",
"block.wildbackport.mangrove_roots": "紅樹林木根",
"block.wildbackport.muddy_mangrove_roots": "淤泥紅樹林木根",
"block.wildbackport.stripped_mangrove_log": "剝皮紅樹林木原木",
"block.wildbackport.stripped_mangrove_wood": "剝皮紅樹林木塊",
"block.wildbackport.mangrove_leaves": "紅樹林木樹葉",
"block.wildbackport.mud_brick_slab": "泥紅磚半磚",
"block.wildbackport.mud": "泥巴",
"block.wildbackport.packed_mud": "泥坯",
"block.wildbackport.mud_bricks": "泥磚",
"block.wildbackport.mud_brick_stairs": "泥紅磚樓梯",
"block.wildbackport.mud_brick_wall": "泥磚牆",
"block.wildbackport.frogspawn": "青蛙卵",
"block.wildbackport.mangrove_planks": "紅樹林木材",
"block.wildbackport.mangrove_propagule": "紅樹林木胎生苗",
"block.wildbackport.mangrove_door": "紅樹林木門",
"block.wildbackport.mangrove_wood": "紅樹林木",
"block.wildbackport.mangrove_slab": "紅樹林木半磚",
"block.wildbackport.mangrove_stairs": "紅樹林木階梯",
"block.wildbackport.mangrove_sign": "紅樹林木告示牌",
"block.wildbackport.mangrove_wall_sign": "牆上的紅樹林木告示牌",
"block.wildbackport.mangrove_pressure_plate": "紅樹林木壓力板",
"block.wildbackport.mangrove_button": "紅樹林木按鈕",
"block.wildbackport.mangrove_fence": "紅樹林木柵欄",
"block.wildbackport.mangrove_fence_gate": "紅樹林木柵欄門",
"block.wildbackport.mangrove_trapdoor": "紅樹林木地板門",
"block.wildbackport.potted_mangrove_propagule": "紅樹林木胎生苗盆栽",
"item.wildbackport.mangrove_boat": "紅樹林木船",
"item.wildbackport.oak_chest_boat": "儲物箱橡木船",
"item.wildbackport.spruce_chest_boat": "儲物箱杉木船",
"item.wildbackport.acacia_chest_boat": "儲物箱相思木船",
"item.wildbackport.birch_chest_boat": "儲物箱樺木船",
"item.wildbackport.jungle_chest_boat": "儲物箱叢林木船",
"item.wildbackport.dark_oak_chest_boat": "儲物箱黑橡木船",
"item.wildbackport.mangrove_chest_boat": "儲物箱紅樹林木船",
"item.wildbackport.frog_spawn_egg": "青蛙生怪蛋",
"item.wildbackport.tadpole_spawn_egg": "蝌蚪生怪蛋",
"item.wildbackport.warden_spawn_egg": "獄卒生怪蛋",
"item.wildbackport.allay_spawn_egg": "悅靈生怪蛋",
"item.wildbackport.tadpole_bucket": "蝌蚪桶",
"item.wildbackport.echo_shard": "回聲碎片",
"item.wildbackport.recovery_compass": "回生羅盤",
"item.wildbackport.disc_fragment_5": "唱片碎片 5",
"item.wildbackport.disc_fragment_5.desc": "唱片 - 5",
"item.wildbackport.music_disc_5": "唱片",
"item.wildbackport.music_disc_5.desc": "Samuel Åberg - 5",
"effect.wildbackport.darkness": "黑暗",
"enchantment.wildbackport.swift_sneak": "迅捷潛行",
"entity.wildbackport.allay": "悅靈",
"entity.wildbackport.warden": "獄卒",
"entity.wildbackport.frog": "青蛙",
"entity.wildbackport.tadpole": "蝌蚪",
"entity.wildbackport.wb_boat": "船",
"entity.wildbackport.chest_boat": "儲物箱船",
"subtitles.entity.warden.roar": "獄卒咆哮",
"subtitles.entity.warden.sniff": "獄卒吸氣",
"subtitles.entity.warden.emerge": "獄卒出現",
"subtitles.entity.warden.dig": "獄卒掘挖",
"subtitles.entity.warden.hurt": "獄卒受傷",
"subtitles.entity.warden.death": "獄卒死亡",
"subtitles.entity.warden.step": "獄卒踏步",
"subtitles.entity.warden.listening": "獄卒傾聽",
"subtitles.entity.warden.listening_angry": "獄卒憤怒地注意到",
"subtitles.entity.warden.heartbeat": "獄卒心跳",
"subtitles.entity.warden.attack_impact": "獄卒擊中",
"subtitles.entity.warden.tendril_clicks": "獄卒卷鬚拍動",
"subtitles.entity.warden.angry": "獄卒暴怒",
"subtitles.entity.warden.agitated": "獄卒憤怒地咆哮",
"subtitles.entity.warden.ambient": "獄卒發牢騷",
"subtitles.entity.warden.nearby_close": "獄卒接近",
"subtitles.entity.warden.nearby_closer": "獄卒進展",
"subtitles.entity.warden.nearby_closest": "獄卒貼近",
"subtitles.entity.frog.ambient": "青蛙呱呱叫",
"subtitles.entity.frog.death": "青蛙死亡",
"subtitles.entity.frog.eat": "青蛙進食",
"subtitles.entity.frog.hurt": "青蛙受傷",
"subtitles.entity.frog.lay_spawn": "青蛙產卵",
"subtitles.entity.frog.long_jump": "青蛙跳躍",
"commands.warden_spawn_tracker.set.success.single": "警告 %s",
"commands.warden_spawn_tracker.set.success.multiple": "警告 %s 玩家",
"commands.warden_spawn_tracker.clear.success.single": "由 %s移除警告",
"commands.warden_spawn_tracker.clear.success.multiple": "由 %s 玩家移除警告",
"death.attack.sonic_boom": "%1$s 被超音波擊斃",
"death.attack.sonic_boom.player": "%1$s 嘗試逃離 %2$s時被超音波擊斃",
"gamerule.doWardenSpawning": "召喚獄卒"
}

View file

@ -1,77 +1,10 @@
{
"parent": "block/block",
"parent": "wildbackport:block/template_sculk_shrieker",
"textures": {
"bottom": "wildbackport:block/sculk_shrieker_bottom",
"side": "wildbackport:block/sculk_shrieker_side",
"top": "wildbackport:block/sculk_shrieker_top",
"inner_top": "wildbackport:block/sculk_shrieker_inner_top",
"particle": "wildbackport:block/sculk_shrieker_bottom"
},
"elements": [
{
"name": "bottom_slab",
"from": [0, 0, 0],
"to": [16, 8, 16],
"faces": {
"north": {"uv": [0, 8, 16, 16], "texture": "#side"},
"east": {"uv": [0, 8, 16, 16], "texture": "#side"},
"south": {"uv": [0, 8, 16, 16], "texture": "#side"},
"west": {"uv": [0, 8, 16, 16], "texture": "#side"},
"up": {"uv": [0, 0, 16, 16], "texture": "#inner_top"},
"down": {"uv": [0, 0, 16, 16], "texture": "#bottom"}
}
},
{
"name": "top_slab",
"from": [1, 8, 1],
"to": [15, 15, 15],
"faces": {
"north": {"uv": [1, 0, 15, 8], "texture": "#side"},
"east": {"uv": [1, 0, 15, 8], "texture": "#side"},
"south": {"uv": [1, 0, 15, 8], "texture": "#side"},
"west": {"uv": [1, 0, 15, 8], "texture": "#side"},
"up": {"uv": [1, 1, 15, 15], "texture": "#top"}
}
},
{
"name": "up",
"from": [1, 14.98, 1],
"to": [15, 14.98, 15],
"faces": {
"down": {"uv": [1, 1, 15, 15], "texture": "#top"}
}
},
{
"name": "south",
"from": [1, 8, 14.98],
"to": [15, 15, 14.98],
"faces": {
"north": {"uv": [1, 0, 15, 8], "texture": "#side"}
}
},
{
"name": "north",
"from": [1, 8, 1.02],
"to": [15, 15, 1.02],
"faces": {
"south": {"uv": [1, 0, 15, 8], "texture": "#side"}
}
},
{
"name": "east",
"from": [14.98, 8, 1],
"to": [14.98, 15, 15],
"faces": {
"west": {"uv": [1, 0, 15, 8], "texture": "#side"}
}
},
{
"name": "west",
"from": [1.02, 8, 1],
"to": [1.02, 15, 15],
"faces": {
"east": {"uv": [1, 0, 15, 8], "texture": "#side", "cullface": "east"}
}
}
]
"particle": "wildbackport:block/sculk_shrieker_bottom",
"side": "wildbackport:block/sculk_shrieker_side",
"top": "wildbackport:block/sculk_shrieker_top"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 253 B

After

Width:  |  Height:  |  Size: 385 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 724 B

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 729 B

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 321 B

After

Width:  |  Height:  |  Size: 539 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 138 B

After

Width:  |  Height:  |  Size: 191 B

View file

@ -34,6 +34,7 @@
"access.WoodTypeAccessor",
"common.BlockEntityTypeMixin",
"common.FlyNodeEvaluatorMixin",
"common.GoToWantedItemMixin",
"common.LivingEntityMixin",
"common.MobEffectMixin",
"common.MobEffectMixin$MobEffectInstanceMixin",
@ -45,10 +46,6 @@
"common.SculkSensorBlockMixin",
"common.SlimeMixin",
"common.VibrationListenerMixin",
"common.event.GameEventListenerRegistrarMixin",
"common.event.ServerLevel$CallbackMixin",
"common.event.TransientEntitySectionManager$CallbackMixin",
"common.event.TransientEntitySectionManagerAccessor",
"extension.BoatTypeMixin",
"extension.PoseMixin",
"network.ClientboundUpdateMobEffectPacketMixin",