Compare commits

..

4 commits

Author SHA1 Message Date
RuyaSavascisi
e9fa2a4c58
tr_tr.json Turkish Localization for the mod 2024-08-01 14:28:30 +02:00
250b732fd9 fix: #76 Logic Issue with Placement 2023-06-01 14:33:29 +02:00
5ce1bc618d fix: 1-block previews on consecutive placements 2023-06-01 14:31:26 +02:00
e6e78ca89f update translations 2023-06-01 14:30:44 +02:00
6 changed files with 152 additions and 11 deletions

View file

@ -15,4 +15,4 @@ mcp_mappings=1.17.1
jei_version=jei-1.17.1:8.3.0.39 jei_version=jei-1.17.1:8.3.0.39
version_major=2 version_major=2
version_minor=9 version_minor=11

View file

@ -22,7 +22,7 @@ import java.util.Set;
public class RenderBlockPreview public class RenderBlockPreview
{ {
public WandJob wandJob; private WandJob wandJob;
public Set<BlockPos> undoBlocks; public Set<BlockPos> undoBlocks;
@SubscribeEvent @SubscribeEvent
@ -39,7 +39,11 @@ public class RenderBlockPreview
if(wand == null) return; if(wand == null) return;
if(!(player.isCrouching() && ClientEvents.isOptKeyDown())) { if(!(player.isCrouching() && ClientEvents.isOptKeyDown())) {
if(wandJob == null || !compareRTR(wandJob.rayTraceResult, rtr) || !(wandJob.wand.equals(wand))) { // Use cached wandJob for previews of the same target pos/dir
// Exception: always update if blockCount < 2 to prevent 1-block previews when block updates
// from the last placement are lagging
if(wandJob == null || !compareRTR(wandJob.rayTraceResult, rtr) || !(wandJob.wand.equals(wand))
|| wandJob.blockCount() < 2) {
wandJob = ItemWand.getWandJob(player, player.level, rtr, wand); wandJob = ItemWand.getWandJob(player, player.level, rtr, wand);
} }
blocks = wandJob.getBlockPositions(); blocks = wandJob.getBlockPositions();

View file

@ -87,6 +87,10 @@ public class WandJob
return placeSnapshots.stream().map(ISnapshot::getPos).collect(Collectors.toSet()); return placeSnapshots.stream().map(ISnapshot::getPos).collect(Collectors.toSet());
} }
public int blockCount() {
return placeSnapshots.size();
}
public boolean doIt() { public boolean doIt() {
ArrayList<ISnapshot> executed = new ArrayList<>(); ArrayList<ISnapshot> executed = new ArrayList<>();

View file

@ -6,8 +6,6 @@ import net.minecraft.world.item.BlockItem;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.context.BlockPlaceContext; import net.minecraft.world.item.context.BlockPlaceContext;
import net.minecraft.world.level.Level; import net.minecraft.world.level.Level;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.BlockStateProperties;
import net.minecraft.world.level.block.state.properties.Property; import net.minecraft.world.level.block.state.properties.Property;
@ -100,7 +98,7 @@ public class PlaceSnapshot implements ISnapshot
// Can block be placed? // Can block be placed?
BlockState blockState = item.getBlock().getStateForPlacement(ctx); BlockState blockState = item.getBlock().getStateForPlacement(ctx);
if(blockState == null) return null; if(blockState == null || !blockState.canSurvive(world, pos)) return null;
// Forbidden Tile Entity? // Forbidden Tile Entity?
if(!WandUtil.isTEAllowed(blockState)) return null; if(!WandUtil.isTEAllowed(blockState)) return null;
@ -108,11 +106,6 @@ public class PlaceSnapshot implements ISnapshot
// No entities colliding? // No entities colliding?
if(WandUtil.entitiesCollidingWithBlock(world, blockState, pos)) return null; if(WandUtil.entitiesCollidingWithBlock(world, blockState, pos)) return null;
// Adjust blockstate to neighbors
// TODO: verify that
blockState = Block.updateFromNeighbourShapes(blockState, world, pos);
if(blockState.getBlock() == Blocks.AIR || !blockState.canSurvive(world, pos)) return null;
// Copy block properties from supporting block // Copy block properties from supporting block
if(targetMode && supportingBlock != null) { if(targetMode && supportingBlock != null) {
// Block properties to be copied (alignment/rotation properties) // Block properties to be copied (alignment/rotation properties)

View file

@ -0,0 +1,70 @@
{
"item.constructionwand.stone_wand": "Каменный жезл",
"item.constructionwand.iron_wand": "Железный жезл",
"item.constructionwand.diamond_wand": "Алмазный жезл",
"item.constructionwand.infinity_wand": "Бесконечный жезл",
"item.constructionwand.core_angel": "Ангельское ядро для жезла",
"item.constructionwand.core_destruction": "Ядро разрушения для жезла",
"constructionwand.tooltip.blocks": "Максимум %d блоков",
"constructionwand.tooltip.shift": "Нажмите [SHIFT]",
"constructionwand.tooltip.cores": "Ядер жезла:",
"constructionwand.tooltip.core_tip": "Объедините ядро со своим жезлом в сетке создания.",
"constructionwand.option.cores": "",
"constructionwand.option.cores.constructionwand:default": "Ядро строительства",
"constructionwand.option.cores.constructionwand:default.desc": "Расширяйте свои строения на стороне, обращённой к Вам.",
"constructionwand.option.cores.constructionwand:core_angel": "§6Ангельское ядро",
"constructionwand.option.cores.constructionwand:core_angel.desc": "Размещает за блоками и в воздухе.",
"constructionwand.option.cores.constructionwand:core_destruction": "§cЯдро разрушения",
"constructionwand.option.cores.constructionwand:core_destruction.desc": "Уничтожает блоки на стороне, обращённой к Вам.",
"constructionwand.option.lock": "Ограничение: ",
"constructionwand.option.lock.horizontal": "§aВлево/Вправо",
"constructionwand.option.lock.horizontal.desc": "Строить горизонтальную колонну перед основным блоком.",
"constructionwand.option.lock.vertical": "§aВверх/Вниз",
"constructionwand.option.lock.vertical.desc": "Строить вертикальную колонну перед основным блоком.",
"constructionwand.option.lock.northsouth": "§6Север/Юг",
"constructionwand.option.lock.northsouth.desc": "Строить ряд в С/Ю направлении непосредственно за основным блоком.",
"constructionwand.option.lock.eastwest": "§6Восток/Запад",
"constructionwand.option.lock.eastwest.desc": "Строить ряд в В/З направлении непосредственно за основным блоком.",
"constructionwand.option.lock.nolock": "§cНичего",
"constructionwand.option.lock.nolock.desc": "Расширять с любой стороны основного блока.",
"constructionwand.option.direction": "Направление: ",
"constructionwand.option.direction.target": "§6Цель",
"constructionwand.option.direction.target.desc": "Размещать блоки с таким же направлением как целевой блок.",
"constructionwand.option.direction.player": "§aИгрок",
"constructionwand.option.direction.player.desc": "Размещать блоки, обращённые к игроку.",
"constructionwand.option.replace": "Замена: ",
"constructionwand.option.replace.yes": "§aДа",
"constructionwand.option.replace.yes.desc": "Заменять некоторые блоки как жидкости, снег и высокорослая трава.",
"constructionwand.option.replace.no": "§cНет",
"constructionwand.option.replace.no.desc": "Не заменять блоки.",
"constructionwand.option.match": "Совпадение: ",
"constructionwand.option.match.exact": "§aТочное",
"constructionwand.option.match.exact.desc": "Расширять только абсолютно одинаковые блоки.",
"constructionwand.option.match.similar": "§6Похожее",
"constructionwand.option.match.similar.desc": "Подносить аналогичные блоки (пример: земля/трава) поровну.",
"constructionwand.option.match.any": "§cНикакое",
"constructionwand.option.match.any.desc": "Расширять любой блок.",
"constructionwand.option.random": "Случайно: ",
"constructionwand.option.random.yes": "§aДа",
"constructionwand.option.random.yes.desc": "Размещать случайные блоки, имеющиеся в Вашей горячей панели.",
"constructionwand.option.random.no": "§cНет",
"constructionwand.option.random.no.desc": "Не располагать блоки в случайном порядке.",
"constructionwand.description.wand": "%1$s может размещать до %2$d блоков сбоку от строения, обращённое к Вам и его хватит на %3$s блоков.\n\nУдерживайте %5$s и прокрутите колёсиком для изменения ограничения по размещении (Горизонтально, Вертикально, Север/Юг, Восток/Запад, Без ограничивания).\n\nОткройте экран настроек при помощи %6$s§9+щелчок правой кнопкой мыши§0.\n\n§5§nОТМЕНА§0§r\nУдерживайте §9Приседание+§0%4$s пока смотрите на блоки, установленные Вами, они будут выделены зелёным контуром. §9Приседание+§0%4$s§9+щелчок правой кнопкой мыши§0 на любой из них отменит операцию, вернув Вам все предметы обратно. Если использовать Ядро разрушения, то он вернёт блоки.\n\n§5§nКОНТЕЙНЕР§0§r\nШалкеровые ящики, мешки и множество контейнеров из других модов могут предоставлять строительные блоки в жезл.\n\n§5§nПРИОРИТЕТ ЛЕВОЙ РУКИ§0§r\nЕсли у Вас в левой руке находятся блоки, то они будут размещаться вместо блока, на который Вы смотрите.",
"constructionwand.description.durability.limited": "на %d блоков",
"constructionwand.description.durability.unlimited": "вечно",
"constructionwand.description.key.sneak": "Приседание",
"constructionwand.description.key.sneak_opt": "Приседание+%s",
"constructionwand.description.core": "§5§nУСТАНОВКА§0§r\nПоложите своё новое ядро вместе со своим жезлом в сетку создания для его установки. Для того, чтобы переключаться между ядрами, удерживайте %s и нажмите левую кнопку мыши по пустому пространству с жезлом в руке или используйте экран настроек.",
"constructionwand.description.core_angel": "Ангельское ядро размещает блоки на противоположной стороне блока (или ряда блоков), обращённые к Вам. Максимальное расстояние зависит от уровня жезла. Щелчок правой кнопкой мыши по пустому воздуху разместит блок в воздухе. Чтобы это сделать, Вам нужно иметь необходимые блоки в левой руке, чтобы разместить их.",
"constructionwand.description.core_destruction": "Ядро разрушения разрушает блоки (не функциональные блоки), обращённые к Вам. Максимально количество блоков зависит от уровня жезла. Разрушенные блоки исчезают в пустоту, можно использовать функцию отмены в случае допущенной ошибки.",
"stat.constructionwand.use_wand": "Блоки, размещённые при помощи Жезла"
}

View file

@ -0,0 +1,70 @@
{
"item.constructionwand.stone_wand": "Taş Asa",
"item.constructionwand.iron_wand": "Demir Asa",
"item.constructionwand.diamond_wand": "Elmas Asa",
"item.constructionwand.infinity_wand": "Sonsuzluk Asası",
"item.constructionwand.core_angel": "Melek Asa Çekirdeği",
"item.constructionwand.core_destruction": "Yıkım Asa Çekirdeği",
"constructionwand.tooltip.blocks": "Maks. %d blok",
"constructionwand.tooltip.shift": "[SHIFT] bas",
"constructionwand.tooltip.cores": "Asa çekirdekleri:",
"constructionwand.tooltip.core_tip": "Çekirdeği asanızla birlikte üretim ızgarasında birleştirin",
"constructionwand.option.cores": "",
"constructionwand.option.cores.constructionwand:default": "İnşa Çekirdeği",
"constructionwand.option.cores.constructionwand:default.desc": "Yapınızın size bakan tarafını uzatır",
"constructionwand.option.cores.constructionwand:core_angel": "§6Melek Çekirdeği",
"constructionwand.option.cores.constructionwand:core_angel.desc": "Blokların arkasına ve havaya yerleştirir",
"constructionwand.option.cores.constructionwand:core_destruction": "§cYıkım Çekirdeği",
"constructionwand.option.cores.constructionwand:core_destruction.desc": "Size bakan taraftaki blokları yok eder",
"constructionwand.option.lock": "Sınırlama: ",
"constructionwand.option.lock.horizontal": "§aSol/Sağ",
"constructionwand.option.lock.horizontal.desc": "Orijinal bloğun önüne yatay bir sütun oluşturur",
"constructionwand.option.lock.vertical": "§aYukarı/Aşağı",
"constructionwand.option.lock.vertical.desc": "Orijinal bloğun önünde dikey bir sütun oluşturur",
"constructionwand.option.lock.northsouth": "§6Kuzey/Güney",
"constructionwand.option.lock.northsouth.desc": "Orijinal bloğun üstüne K/G yönünde bir sıra oluşturun",
"constructionwand.option.lock.eastwest": "§6Doğu/Batı",
"constructionwand.option.lock.eastwest.desc": "Orijinal bloğun üstüne D/B yönünde bir sıra oluşturur",
"constructionwand.option.lock.nolock": "§cYok",
"constructionwand.option.lock.nolock.desc": "Orijinal bloğun herhangi bir tarafından uzatır",
"constructionwand.option.direction": "Yön: ",
"constructionwand.option.direction.target": "§6Hedef",
"constructionwand.option.direction.target.desc": "Blokları hedef blokla aynı yönde yerleştirir",
"constructionwand.option.direction.player": "§aOyuncu",
"constructionwand.option.direction.player.desc": "Blokları oyuncuya bakacak şekilde yerleştirir",
"constructionwand.option.replace": "Değiştirme: ",
"constructionwand.option.replace.yes": "§aEvet",
"constructionwand.option.replace.yes.desc": "Sıvılar, kar ve uzun otlar gibi belirli blokları değiştirir",
"constructionwand.option.replace.no": "§cHayır",
"constructionwand.option.replace.no.desc": "Blokları değiştirmez",
"constructionwand.option.match": "Eşleşen: ",
"constructionwand.option.match.exact": "§aAynı",
"constructionwand.option.match.exact.desc": "Yalnızca tamamen aynı olan blokları uzatır",
"constructionwand.option.match.similar": "§6Benzer",
"constructionwand.option.match.similar.desc": "Benzer bloklara (toprak/çimen türleri) eşit davranır",
"constructionwand.option.match.any": "§cHerhangi",
"constructionwand.option.match.any.desc": "Herhangi bir bloğu uzatır",
"constructionwand.option.random": "Rastgele: ",
"constructionwand.option.random.yes": "§aEvet",
"constructionwand.option.random.yes.desc": "Hotbar'ınızdan rastgele bloklar yerleştirir",
"constructionwand.option.random.no": "§cHayır",
"constructionwand.option.random.no.desc": "Yerleştirilen blokları rastgeleleştirmez",
"constructionwand.description.wand": "%1$s, bir yapının size bakan tarafına en fazla %2$d blok yerleştirebilir ve %3$s dayanıklılığı vardır.\n\n%5$s tuşunu basılı tutun ve yerleştirme sınırlamasını değiştirmek için kaydırın (Yatay, Dikey, Kuzey/Güney, Doğu/Batı, Kilitsiz).\n\n%6$s§9+Sağ tıklama ile seçenek ekranınıın§0.\n\n§5§nGERİ ALMA§0§r\nBir bloğa bakarken §9Eğil+§0%4$s tuşunu basılı tuttuğunuzda, yerleştirdiğiniz son bloklar, çevresinde yeşil bir çerçeveyle gösterilecektir. §9Eğil+§0%4$s§9+Bunlardan herhangi birine sağ tıklama§0 işlemi geri alacak ve tüm öğeleri size geri verecektir. Yıkım çekirdeğini kullandıysanız blokları geri koyacaktır.\n\n§5§nKONTEYNERLER§0§r\nShulker kutuları, paketler ve diğer modlardan birçok konteyner, asa için yapı taşları sağlar.\n\n§5§nBOŞTAKİ EL ÖNCELİĞݧ0§r\nBoştaki elinizde blok olduğunda, baktığınız blok yerine boştaki elinizdekini yerleştirirsiniz.",
"constructionwand.description.durability.limited": "%d blok için",
"constructionwand.description.durability.unlimited": "sonsuza kadar",
"constructionwand.description.key.sneak": "Eğil",
"constructionwand.description.key.sneak_opt": "Eğil+%s",
"constructionwand.description.core": "§5§nKURULUM§0§r\nTakmak için yeni çekirdeğinizi asanızla birlikte bir üretim ızgarasına koyun. Çekirdekler arasında geçiş yapmak için %s tuşunu basılı tutun ve asanızla boş alana sol tıklayın veya seçenek ekranını kullanın",
"constructionwand.description.core_angel": "Melek çekirdeği, karşı karşıya olduğunuz bloğun (veya blok sırasının) karşı tarafına bir blok yerleştirir. Maksimum mesafe asa seviyesine bağlıdır. Havada bir blok yerleştirmek için boş alana sağ tıklayın. Bunu yapmak için, yerleştirmek istediğiniz bloğu boştaki elinize almalısınız.",
"constructionwand.description.core_destruction": "Yıkım çekirdeği, size bakan taraftaki blokları (tile entities haricinde) yok eder. Maksimum blok sayısı asa seviyesine bağlıdır. Yok edilen bloklar boşluğa kaybolur, hata yaptıysanız geri alma özelliğini kullanabilirsiniz.",
"stat.constructionwand.use_wand": "Asa kullanılarak yerleştirilen bloklar"
}