added lang files and small tweaks
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
// }
|
||||
}
|
|
@ -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);
|
||||
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
}
|
|
@ -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",
|
||||
|
|
|
@ -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"
|
||||
}
|
|
@ -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": "召喚獄卒"
|
||||
}
|
|
@ -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"
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 253 B After Width: | Height: | Size: 385 B |
Before Width: | Height: | Size: 724 B After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 729 B After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 321 B After Width: | Height: | Size: 539 B |
Before Width: | Height: | Size: 138 B After Width: | Height: | Size: 191 B |
|
@ -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",
|
||||
|
|