From 7822ba7a42975258258cbe59c0c50e2e3c1e9321 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Sun, 6 Oct 2019 21:59:13 +0200 Subject: [PATCH 1/8] Create in Russian - Added ru_ru.json, thanks to Sirabein --- .../resources/assets/create/lang/ru_ru.json | 608 ++++++++++++++++++ 1 file changed, 608 insertions(+) create mode 100644 src/main/resources/assets/create/lang/ru_ru.json diff --git a/src/main/resources/assets/create/lang/ru_ru.json b/src/main/resources/assets/create/lang/ru_ru.json new file mode 100644 index 000000000..b3d6c96a0 --- /dev/null +++ b/src/main/resources/assets/create/lang/ru_ru.json @@ -0,0 +1,608 @@ +{ + + "_comment": "-------------------------] GAME ELEMENTS [------------------------------------------------", + + "item.create.symmetry_wand": "Посох симметрии", + "item.create.placement_handgun": "Портативный размещатель блоков", + "item.create.tree_fertilizer": "Удобренье для деревьев", + "item.create.empty_blueprint": "Пустая схема", + "item.create.andesite_alloy_cube": "Андезитовый сплав", + "item.create.blaze_brass_cube": "Огненная латунь", + "item.create.chorus_chrome_cube": "Хром хоруса", + "item.create.chromatic_compound_cube": "Chromatic Compound", + "item.create.shadow_steel_cube": "Shadow Steel", + "item.create.blueprint_and_quill": "Схема и перо", + "item.create.blueprint": "Схема", + "item.create.belt_connector": "Механическая лента", + "item.create.filter": "Filter", + "item.create.rose_quartz": "Rose Quartz", + "item.create.refined_rose_quartz": "Refined Rose Quartz", + "item.create.refined_radiance_cube": "Refined Radiance", + "item.create.iron_sheet": "Железная пластина", + "item.create.gold_sheet": "Золотая пластина", + "item.create.propeller": "Пропеллер", + "item.create.flour": "Пшеничная мука", + "item.create.dough": "Тесто", + + "item.create.blazing_pickaxe": "Blazing Pickaxe", + "item.create.blazing_shovel": "Blazing Shovel", + "item.create.blazing_axe": "Blazing Axe", + "item.create.blazing_sword": "Blazing Longsword", + + "item.create.shadow_steel_pickaxe": "Shadow Steel Pickaxe", + "item.create.shadow_steel_mattock": "Shadow Steel Garden Mattock", + "item.create.shadow_steel_sword": "Shadow Steel Sword", + + "item.create.rose_quartz_pickaxe": "Gilded Quartz Pickaxe", + "item.create.rose_quartz_shovel": "Gilded Quartz Shovel", + "item.create.rose_quartz_axe": "Gilded Quartz Axe", + "item.create.rose_quartz_sword": "Gilded Quartz Blade", + + "block.create.cogwheel": "Шестерня", + "block.create.large_cogwheel": "Большая шестерня", + "block.create.turntable": "Поворотный стол", + "block.create.gearbox": "Муфта", + "block.create.gearshift": "Реверсивная муфта", + "block.create.clutch": "Отключаемая муфта", + "block.create.shaft": "Вал", + "block.create.encased_belt": "Ленточный привод", + "block.create.encased_shaft": "Вальный привод", + "block.create.encased_fan": "Вентелятор", + "block.create.motor": "Мотор", + "block.create.belt": "Механическая лента", + "block.create.crushing_wheel": "Дробильное колесо", + "block.create.drill": "Механический бур", + "block.create.harvester": "Механический жнец", + "block.create.water_wheel": "Водяное колесо", + "block.create.belt_support": "Ленточноя опора", + "block.create.mechanical_press": "Механический пресс", + + "block.create.sticky_mechanical_piston": "Липкий механический поршень", + "block.create.mechanical_piston": "Механический поршень", + "block.create.mechanical_piston_head": "Mechanical Piston Head", + "block.create.piston_pole": "Удлинитель поршня", + "block.create.mechanical_bearing": "Механический подшипник", + "block.create.translation_chassis": "Шасси перевода", + "block.create.rotation_chassis": "Шасси вращения", + + "block.create.contact": "Сигнальное соединение", + "block.create.redstone_bridge": "Сигнальное звено", + "block.create.stockswitch": "Сканер хранилища", + "block.create.flexcrate": "Гибкий ящик", + "block.create.extractor": "Экстрактор", + "block.create.belt_funnel": "Ленточная воронка", + "block.create.linked_extractor": "Связаный экстрактор", + "block.create.pulse_repeater": "Импульсный повторитель", + "block.create.flexpeater": "Настраиваемый повторитель", + "block.create.entity_detector": "Ленточный сканер", + + "block.create.tiled_glass": "Плиточное стекло", + "block.create.tiled_glass_pane": "Плиточная стеклянная панель", + + "block.create.window_in_a_block": "Block with Glass Pane", + "block.create.andesite_bricks": "Андезитовые кирпичи", + "block.create.diorite_bricks": "Диоритовые кирпичи", + "block.create.granite_bricks": "Гранитыне кирпичи", + + "block.create.gabbro": "Габбро", + "block.create.gabbro_stairs": "Габбровые ступеньки", + "block.create.gabbro_slab": "Габбровая плита", + "block.create.gabbro_wall": "Габбровая ограда", + "block.create.polished_gabbro": "Полированный габбро", + "block.create.gabbro_bricks": "Габбровые кирпичи", + "block.create.gabbro_bricks_stairs": "Ступеньки из габбрового кирпича", + "block.create.gabbro_bricks_wall": "Ограда из габбрового кирпича", + "block.create.paved_gabbro_bricks": "Мощёный габбровый кирпич", + "block.create.paved_gabbro_bricks_slab": "Плита из мощёного габбрового кирпича", + "block.create.indented_gabbro": "Резная габбровая плитка", + "block.create.indented_gabbro_slab": "Плита из резной габбровой плитки", + "block.create.slightly_mossy_gabbro_bricks": "Замшелые габбровые кирпичи", + "block.create.mossy_gabbro_bricks": "Заросшие габбровые кирпичи", + + "block.create.weathered_limestone": "Обветренный известняк", + "block.create.weathered_limestone_stairs": "Ступеньки из обветренного известняка", + "block.create.weathered_limestone_wall": "Ограда из обветренного известняка", + "block.create.weathered_limestone_slab": "Плита из обветренного известняка", + "block.create.polished_weathered_limestone": "Полированный обветренный известняк", + "block.create.polished_weathered_limestone_slab": "Плита из полированного обветренного известняка", + "block.create.weathered_limestone_bricks": "Кирпичи из обветренного известняка", + "block.create.weathered_limestone_bricks_stairs": "Ступеньки из кирпича из обветренного известняка", + "block.create.weathered_limestone_bricks_wall": "Ограда из кирпича из обветренного известняка", + "block.create.weathered_limestone_bricks_slab": "Плита из кирпича из обветренного известняка", + "block.create.weathered_limestone_pillar": "Колонна из обветренного известняка", + + "block.create.dolomite_pillar": "Доломитовая колонна", + "block.create.dolomite": "Доломит", + "block.create.dolomite_stairs": "Доломитовые ступенки", + "block.create.dolomite_wall": "Доломитовая ограда", + "block.create.dolomite_slab": "Доломитовая плита", + "block.create.dolomite_bricks": "Доломитовые кирпичи", + "block.create.dolomite_bricks_wall": "Ограда из доломитового кирпича", + "block.create.dolomite_bricks_stairs": "Ступеньки из доломитового кирпича", + "block.create.dolomite_bricks_slab": "Плита из доломитового кирпича", + "block.create.polished_dolomite": "Полированный доломит", + + "block.create.limesand": "Известь", + "block.create.limestone": "Известняк", + "block.create.limestone_stairs": "Известковые ступеньки", + "block.create.limestone_slab": "Известняковая плита", + "block.create.limestone_wall": "Известняковая ограда", + "block.create.limestone_bricks": "Известковые кирпичи", + "block.create.limestone_bricks_stairs": "Ступеньки из известкового кирпича", + "block.create.limestone_bricks_slab": "Плита из известкового кирпича", + "block.create.limestone_bricks_wall": "Ограда из известкового кирпича", + "block.create.polished_limestone": "Полированный известняк", + "block.create.polished_limestone_slab": "Плита из полированного известняка", + "block.create.limestone_pillar": "Известняковая колонна", + + "block.create.schematicannon": "Схемопушка", + "block.create.schematic_table": "Стол для схем", + "block.create.creative_crate": "Креативный снабжатель схемопушки", + + "block.create.cocoa_log": "Бревно какао-тропического дерева", + + "block.create.shop_shelf": "Shelf", + + "_comment": "-------------------------] UI & MESSAGES [------------------------------------------------", + + "death.attack.create.crush": "%1$s был переработан дробильными колёсами", + "death.attack.create.fan_fire": "%1$s сгорел заживо от горячего воздуха.", + "death.attack.create.fan_lava": "%1$s сгорел заживо от лавового вентилятора", + "death.attack.create.drill": "%1$s был проколот механическим буром", + + "create.recipe.crushing": "Дробление", + "create.recipe.splashing": "Мытьё вентилятором", + "create.recipe.splashing.fan": "Вентилятор за проточной водой", + "create.recipe.smokingViaFan": "Копчение вентилятором", + "create.recipe.smokingViaFan.fan": "Вентелятор за огнём", + "create.recipe.blastingViaFan": "Плавление вентилятором", + "create.recipe.blastingViaFan.fan": "Вентелятор за лавой", + "create.recipe.pressing": "Механический пресс", + "create.recipe.blockzapperUpgrade": "Портативный размещатель блоков", + "create.recipe.processing.chance": "%1$s%% шанс выпадения", + + "create.generic.range": "Зона", + "create.generic.radius": "Радиус", + "create.generic.speed": "Скорость", + "create.generic.delay": "Задержка", + "create.generic.unit.ticks": "тик", + "create.generic.unit.seconds": "сек", + "create.generic.unit.minutes": "мин", + + "create.action.scroll": "КолМыши", + "create.action.confirm": "Подтвердить", + "create.action.abort": "Отменить", + "create.action.saveToFile": "Сохранить", + "create.action.discard": "Удалить", + + "create.keyinfo.toolmenu": "Фокусировка меню иструментов", + + "create.gui.scrollInput.defaultTitle": "Выберите:", + "create.gui.scrollInput.scrollToModify": "КолМыши, чтобы изменить", + "create.gui.scrollInput.scrollToSelect": "КолМыши, чтобы выделить", + "create.gui.scrollInput.shiftScrollsFaster": "Зажмите Shift, чтобы прокручивать быстрее", + + "create.gui.toolmenu.focusKey": "Зажмите [%1$s], чтобы сфокусироваться", + "create.gui.toolmenu.cycle": "[КолМыши] , чтобы выбрать", + + "create.gui.symmetryWand.mirrorType": "Зеркало", + "create.gui.symmetryWand.orientation": "Ориентация", + "create.symmetry.mirror.plane": "Линейно", + "create.symmetry.mirror.doublePlane": "Прямоугольно", + "create.symmetry.mirror.triplePlane": "Восьмиугольно", + "create.orientation.orthogonal": "Перпендикулярно", + "create.orientation.diagonal": "Диагонально", + "create.orientation.horizontal": "Горизонтально", + "create.orientation.alongZ": "По Z оси", + "create.orientation.alongX": "По X оси", + + "create.gui.blockzapper.title": "Порт. размещ. блоков", + "create.gui.blockzapper.replaceMode": "Режим замены", + "create.gui.blockzapper.searchDiagonal": "Следовать диагоналям", + "create.gui.blockzapper.searchFuzzy": "Игнорировать материальные границы", + "create.gui.blockzapper.range": "Радиус", + "create.gui.blockzapper.patternSection": "Шаблоны", + "create.gui.blockzapper.pattern.solid": "Сплошной", + "create.gui.blockzapper.pattern.checkered": "Шахматная доска", + "create.gui.blockzapper.pattern.inversecheckered": "Обратная шахматная доска", + "create.gui.blockzapper.pattern.chance25": "25% покрытия", + "create.gui.blockzapper.pattern.chance50": "50% покрытия", + "create.gui.blockzapper.pattern.chance75": "75% покрытия", + + "create.blockzapper.usingBlock": "Материал: %1$s", + "create.blockzapper.componentUpgrades": "Улучшения компонентов:", + "create.blockzapper.component.body": "Корпус", + "create.blockzapper.component.amplifier": "Усилитель", + "create.blockzapper.component.accelerator": "Ускоритель", + "create.blockzapper.component.retriever": "Коллектор", + "create.blockzapper.component.scope": "Прицел", + "create.blockzapper.componentTier.none": "Ничего", + "create.blockzapper.componentTier.blazebrass": "Огненная латунь", + "create.blockzapper.componentTier.choruschrome": "Хром хоруса", + "create.blockzapper.leftClickToSet": "ЛКМ на блок, чтобы выбрать материал", + "create.blockzapper.empty": "Закончились блоки!", + + "create.logistics.filter": "Фильтр", + "create.logistics.firstFrequency": "Част. #1", + "create.logistics.secondFrequency": "Част. #2", + + "create.gui.flexcrate.title": "Гибкий ящик", + "create.gui.flexcrate.storageSpace": "Обьём хранилища", + + "create.gui.stockswitch.title": "Сенсор хранилища", + "create.gui.stockswitch.lowerLimit": "Нижний порог", + "create.gui.stockswitch.upperLimit": "Верхний порог", + "create.gui.stockswitch.startAt": "Включить на", + "create.gui.stockswitch.startAbove": "Включить выше", + "create.gui.stockswitch.stopAt": "Отключить на", + "create.gui.stockswitch.stopBelow": "Отключить ниже", + + "create.schematicAndQuill.dimensions": "Размер схемы: %1$sx%2$sx%3$s", + "create.schematicAndQuill.firstPos": "Первая позиция установлена.", + "create.schematicAndQuill.secondPos": "Вторая позиция установлена.", + "create.schematicAndQuill.noTarget": "Зажмите [Ctrl], чтобы выделять блоки воздуха.", + "create.schematicAndQuill.abort": "Выделение удалено.", + "create.schematicAndQuill.prompt": "Введите название для новой схемы:", + "create.schematicAndQuill.fallbackName": "Моя схема", + "create.schematicAndQuill.saved": "Сохранено как %1$s", + + "create.schematic.invalid": "[!] Недействительный предмет - используйте стол для схем", + "create.schematic.position": "Позиция", + "create.schematic.rotation": "Вращение", + "create.schematic.rotation.none": "Ничего", + "create.schematic.rotation.cw90": "90° по часовой", + "create.schematic.rotation.cw180": "180° по часовой", + "create.schematic.rotation.cw270": "270° по часовой", + "create.schematic.mirror": "Отразить", + "create.schematic.mirror.none": "Ничего", + "create.schematic.mirror.frontBack": "Перед-зад", + "create.schematic.mirror.leftRight": "Лево-право", + + "create.schematic.tool.deploy": "Разместить", + "create.schematic.tool.move": "Сдвиг по XZ", + "create.schematic.tool.movey": "Сдвиг по Y", + "create.schematic.tool.rotate": "Повернуть", + "create.schematic.tool.print": "Напечатать", + "create.schematic.tool.flip": "Отразить", + + "create.schematic.tool.deploy.description.0": "Размещает конструкцию.", + "create.schematic.tool.deploy.description.1": "ПКМ на земле для размещения.", + "create.schematic.tool.deploy.description.2": "Зажмите [Ctrl] для перемещения на фикс. дистанции.", + "create.schematic.tool.deploy.description.3": "[Ctrl]-КолМыши для изменения дистанции.", + "create.schematic.tool.move.description.0": "Сдвигает схему по горизонтали", + "create.schematic.tool.move.description.1": "Смотрите на схему и [CTRL]-КолМыши для сдвига.", + "create.schematic.tool.move.description.2": "", + "create.schematic.tool.move.description.3": "", + "create.schematic.tool.movey.description.0": "Сдвигает схему по вертикали", + "create.schematic.tool.movey.description.1": "[CTRL]-КолМыши для сдвига вверх/вниз", + "create.schematic.tool.movey.description.2": "", + "create.schematic.tool.movey.description.3": "", + "create.schematic.tool.rotate.description.0": "Вращает схему вокруг центра.", + "create.schematic.tool.rotate.description.1": "[CTRL]-КолМыши для поворота на 90°", + "create.schematic.tool.rotate.description.2": "", + "create.schematic.tool.rotate.description.3": "", + "create.schematic.tool.print.description.0": "Моментально размещает структуру в мире", + "create.schematic.tool.print.description.1": "[ПКМ] для размещения в текущем месте.", + "create.schematic.tool.print.description.2": "Только для креативного режима.", + "create.schematic.tool.print.description.3": "", + "create.schematic.tool.flip.description.0": "Отражает схему вдоль выбранной стороны.", + "create.schematic.tool.flip.description.1": "Смотрите на схему и [CTRL]-КолМыши для отражения.", + "create.schematic.tool.flip.description.2": "", + "create.schematic.tool.flip.description.3": "", + + "create.schematics.synchronizing": "Синхронизация...", + "create.schematics.uploadTooLarge": "Схема слишком большая", + "create.schematics.maxAllowedSize": "Максимальный размер файла схемы:", + + "create.gui.schematicTable.title": "Стол для схем", + "create.gui.schematicTable.availableSchematics": "Доступные схемы", + "create.gui.schematicTable.noSchematics": "Нет сохранённых схем", + "create.gui.schematicTable.uploading": "Загрузка...", + "create.gui.schematicTable.finished": "Загрузка завершена!", + + "create.gui.schematicannon.title": "Схемопушка", + "create.gui.schematicannon.settingsTitle": "Параметры размещения", + "create.gui.schematicannon.listPrinter": "Распечатать список материалов", + "create.gui.schematicannon.gunpowderLevel": "Порох: %1$s%%", + "create.gui.schematicannon.shotsRemaining": "Выстрелов осталось: %1$s", + "create.gui.schematicannon.shotsRemainingWithBackup": "C запасом: %1$s", + "create.gui.schematicannon.optionEnabled": "Включена", + "create.gui.schematicannon.optionDisabled": "Отключена", + "create.gui.schematicannon.option.dontReplaceSolid": "Не заменять целые блоки", + "create.gui.schematicannon.option.replaceWithSolid": "Заменять целые блоки целыми блоками", + "create.gui.schematicannon.option.replaceWithAny": "Заменять целые блоки чем угодно", + "create.gui.schematicannon.option.replaceWithEmpty": "Заменять целые блоки пустотой", + "create.gui.schematicannon.option.skipMissing": "Пропускать отсутствующие блоки", + "create.gui.schematicannon.option.skipTileEntities": "Защита от сущностей", + + "create.gui.schematicannon.option.skipMissing.description": "Если схемопушка не найдёт нужный блок, то она продолжит в следующем месте.", + "create.gui.schematicannon.option.skipTileEntities.description": "Схемопушка будет избегать замены блоков с данными, таких как сундук.", + "create.gui.schematicannon.option.dontReplaceSolid.description": "Схемопушка никогда не заменит целые блоки, только не целые и воздух.", + "create.gui.schematicannon.option.replaceWithSolid.description": "Схемопушка будет заменять целый блок только в случае, если в схеме в этом месте расположен целый блок.", + "create.gui.schematicannon.option.replaceWithAny.description": "Схемопушка будет заменять целые блоки, если в схеме в этом месте есть что-либо.", + "create.gui.schematicannon.option.replaceWithEmpty.description": "Схемопушка отчистит все блоки, включая замену на воздух.", + + "create.schematicannon.status.idle": "Бездействует", + "create.schematicannon.status.ready": "Готова", + "create.schematicannon.status.running": "Работает", + "create.schematicannon.status.finished": "Закончила", + "create.schematicannon.status.paused": "Приостоновлена", + "create.schematicannon.status.stopped": "Остоновлена", + "create.schematicannon.status.noGunpowder": "Кончился порох", + "create.schematicannon.status.targetNotLoaded": "Блок не загружен", + "create.schematicannon.status.targetOutsideRange": "Цель слишком далеко", + "create.schematicannon.status.searching": "Поиск", + "create.schematicannon.status.skipping": "Пропуск", + "create.schematicannon.status.missingBlock": "Нет блока:", + "create.schematicannon.status.placing": "Размещение", + "create.schematicannon.status.clearing": "Отчистка", + "create.schematicannon.status.schematicInvalid": "Схема недействительна", + "create.schematicannon.status.schematicNotPlaced": "Схема не размещена", + "create.schematicannon.status.schematicExpired": "Срок действия файла схемы истек", + + "create.tooltip.holdKey": "Зажмите [%1$s]", + "create.tooltip.holdKeyOrKey": "Зажмите [%1$s] или [%2$s]", + "create.tooltip.keyShift": "Shift", + "create.tooltip.keyCtrl": "Ctrl", + + "_comment": "-------------------------] ITEM DESCRIPTIONS [------------------------------------------------", + + "item.create.example_item.tooltip": "EXAMPLE ITEM (just a marker that this tooltip exists)", + "item.create.example_item.tooltip.summary": "A brief description of the item. _Underscores_ highlight a term.", + "item.create.example_item.tooltip.condition1": "When this", + "item.create.example_item.tooltip.behaviour1": "Then this item does this. (behaviours show on shift)", + "item.create.example_item.tooltip.condition2": "And When this", + "item.create.example_item.tooltip.behaviour2": "You can add as many behaviours as you like", + "item.create.example_item.tooltip.control1": "When Ctrl pressed", + "item.create.example_item.tooltip.action1": "These controls are displayed.", + + "item.create.symmetry_wand.tooltip": "SYMMETRY WAND", + "item.create.symmetry_wand.tooltip.summary": "Идеально отражает размещаемые блоки по настроенным плоскостям.", + "item.create.symmetry_wand.tooltip.condition1": "На панели быстрого доступа", + "item.create.symmetry_wand.tooltip.behaviour1": "Остаётся активным", + "item.create.symmetry_wand.tooltip.control1": "ПКМ на землю", + "item.create.symmetry_wand.tooltip.action1": "_Создаёт_ или _Перемещает_ зеркало", + "item.create.symmetry_wand.tooltip.control2": "ПКМ в воздух", + "item.create.symmetry_wand.tooltip.action2": "_Убирает_ зеркало", + "item.create.symmetry_wand.tooltip.control3": "ПКМ крадясь", + "item.create.symmetry_wand.tooltip.action3": "Открывает _Меню_ _настройки_", + + "item.create.placement_handgun.tooltip": "BLOCKZAPPER", + "item.create.placement_handgun.tooltip.summary": "Новейшее устройство для размещения или замены блоков на расстоянии.", + "item.create.placement_handgun.tooltip.control1": "ЛКМ на блок", + "item.create.placement_handgun.tooltip.action1": "Устанавливает выбранный блок как материал.", + "item.create.placement_handgun.tooltip.control2": "ПКМ на блок", + "item.create.placement_handgun.tooltip.action2": "_Размещает_ или _Замещает_ блок.", + "item.create.placement_handgun.tooltip.control3": "ПКМ крадясь", + "item.create.placement_handgun.tooltip.action3": "Открывает _Меню_ _настройки_", + + "item.create.tree_fertilizer.tooltip": "TREE FERTILIZER", + "item.create.tree_fertilizer.tooltip.summary": "Сильная смесь минералов, подходящая обычным видам деревьев.", + "item.create.tree_fertilizer.tooltip.condition1": "При изпользовании на саженце", + "item.create.tree_fertilizer.tooltip.behaviour1": "Выращивает деревья независимо от свободного пространства", + + "block.create.cocoa_log.tooltip": "COCOA LOG", + "block.create.cocoa_log.tooltip.summary": "Улучшенное бревно тропического дерева для упрощения авто фермы _Какао-бобов._", + "block.create.cocoa_log.tooltip.condition1": "Когда вырастет", + "block.create.cocoa_log.tooltip.behaviour1": "Выращивает _Какао-бобы_ со всех сторон", + + "item.create.empty_blueprint.tooltip": "EMPTY SCHEMATIC", + "item.create.empty_blueprint.tooltip.summary": "Используется для крафта и записи в _Столе_ _для_ _схем._", + + "item.create.blueprint.tooltip": "SCHEMATIC", + "item.create.blueprint.tooltip.summary": "Хранит структуру для размещения. Расположите голограмму и используйте _Схемопушку_ для построения голограммы.", + "item.create.blueprint.tooltip.condition1": "Когда в руке", + "item.create.blueprint.tooltip.behaviour1": "Может быть размещена с помошью инсрументов на экране", + "item.create.blueprint.tooltip.control1": "ПКМ крадясь", + "item.create.blueprint.tooltip.action1": "Открывает _Меню_ для ввода точных _Координат._", + + "item.create.blueprint_and_quill.tooltip": "SCHEMATIC AND QUILL", + "item.create.blueprint_and_quill.tooltip.summary": "Используется для сохранения структуры в .nbt файл.", + "item.create.blueprint_and_quill.tooltip.condition1": "Шаг 1", + "item.create.blueprint_and_quill.tooltip.behaviour1": "Выберите две точки с помощью ПКМ", + "item.create.blueprint_and_quill.tooltip.condition2": "Шаг 2", + "item.create.blueprint_and_quill.tooltip.behaviour2": "_Ctrl-КолМыши_ на сторону для изменения размера. ПКМ еще раз для сохранения.", + "item.create.blueprint_and_quill.tooltip.control1": "ПКМ", + "item.create.blueprint_and_quill.tooltip.action1": "Выбрать точку / Сохранить", + "item.create.blueprint_and_quill.tooltip.control2": "С зажатым Ctrl", + "item.create.blueprint_and_quill.tooltip.action2": "Выберать точки в _воздухе._ _КолМыши_ для изменения расстояния.", + "item.create.blueprint_and_quill.tooltip.control3": "ПКМ крадясь", + "item.create.blueprint_and_quill.tooltip.action3": "_Сбрасывает_ и _Удаляет_ выделение.", + + "block.create.creative_crate.tooltip": "CREATIVE CRATE", + "block.create.creative_crate.tooltip.summary": "Снабжает _Схемопушку_ бесконечным запасом блоков", + + "block.create.schematicannon.tooltip": "SCHEMATICANNON", + "block.create.schematicannon.tooltip.summary": "Стреляет блоками для воссоздания размещенной _Схемы._ Использует блоки из соседних инвентарей и _Порох_ как топливо.", + "block.create.schematicannon.tooltip.control1": "ПКМ по пушке", + "block.create.schematicannon.tooltip.action1": "Открывает _Меню_", + + "block.create.schematic_table.tooltip": "SCHEMATIC TABLE", + "block.create.schematic_table.tooltip.summary": "Записывает сохраненные схемы на _Пустые_ _схемы._", + "block.create.schematic_table.tooltip.condition1": "Если положить пустую схему.", + "block.create.schematic_table.tooltip.behaviour1": "Записывает выбранный файл из папки со схемами", + + "block.create.shaft.tooltip": "SHAFT", + "block.create.shaft.tooltip.summary": "_Передаёт_ _вращение_ по прямой.", + + "block.create.cogwheel.tooltip": "COGWHEEL", + "block.create.cogwheel.tooltip.summary": "_Передаёт_ _вращение_ по прямой и к присоеденённым _Шестерням._", + + "block.create.large_cogwheel.tooltip": "LARGE COGWHEEL", + "block.create.large_cogwheel.tooltip.summary": "Увеличенная версия _Шестерни,_ позволяющая _изменять_ _скорость_ _вращения_ при соединении с меньшим аналагом.", + + "block.create.encased_shaft.tooltip": "ENCASED SHAFT", + "block.create.encased_shaft.tooltip.summary": "_Передаёт_ _вращение_ по прямой. Подходит для передачи вращения через стены.", + + "block.create.gearbox.tooltip": "GEARBOX", + "block.create.gearbox.tooltip.summary": "_Передаёт_ _вращение_ в _4_ _направлениях._ Реверсирует прямые соединения.", + + "block.create.gearshift.tooltip": "GEARSHIFT", + "block.create.gearshift.tooltip.summary": "_Переключатель_ _вращения_ для подсоединенных валов.", + "block.create.gearshift.tooltip.condition1": "Когда запитан", + "block.create.gearshift.tooltip.behaviour1": "_Реверсирует_ выходящее _вращение._", + + "block.create.clutch.tooltip": "CLUTCH", + "block.create.clutch.tooltip.summary": "_Переключатель_ _вращения_ для подсоединенных валов.", + "block.create.clutch.tooltip.condition1": "Когда запитан", + "block.create.clutch.tooltip.behaviour1": "_Останавливает_ подачу вращения на другую сторону.", + + "block.create.encased_belt.tooltip": "ENCASED_BELT", + "block.create.encased_belt.tooltip.summary": "_Передаёт_ _вращение_ через себя и к присоеденённому _Ленточному_ _приводу._", + "block.create.encased_belt.tooltip.condition1": "При присоеденёнии к другому Ленточному приводу", + "block.create.encased_belt.tooltip.behaviour1": "Присоеденённый блок будет иметь те же _скорость_ и _направление_ _вращения._ Присоеденённые ленты не обязаны смотреть в туже сторону.", + + "item.create.belt_connector.tooltip": "BELT CONNECTOR", + "item.create.belt_connector.tooltip.summary": "Соединяет _2_ _Вала_ с помощью _Механической_ _ленты._ Соединённые валы будут иметь одинаковые _скорость_ и _направление_ _вращения._ Лента может служить как _Конвейер_ для _Существ._", + "item.create.belt_connector.tooltip.control1": "ПКМ по валу", + "item.create.belt_connector.tooltip.action1": "Выбирает вал в качестве одного шкива ленты. Оба выбранных вала должны быть _на_ _одной_ _линии_ _вертикально,_ _горизонтально_ либо _диагонально_ по направлению ленты.", + "item.create.belt_connector.tooltip.control2": "ПКМ крадясь", + "item.create.belt_connector.tooltip.action2": "_Сбрасывает_ первый выбранный шкив для ленты.", + + "block.create.belt_support.tooltip": "BELT SUPPORT", + "block.create.belt_support.tooltip.summary": "_Исключительно_ _декоративный_ блок, пригодный для монтажа _Механических_ _лент_ к земле.", + "block.create.belt_support.tooltip.condition1": "При размещении под лентой", + "block.create.belt_support.tooltip.behaviour1": "Поддерживает верхнюю часть ремня, скрывая нижнюю.", + + "block.create.motor.tooltip": "MOTOR", + "block.create.motor.tooltip.summary": "Настраиваемый источник _силы_ _вращения_", + + "block.create.water_wheel.tooltip": "WATER WHEEL", + "block.create.water_wheel.tooltip.summary": "Предоставляет _силу_ _вращения_ из смежных _источников_ _воды._", + + "block.create.encased_fan.tooltip": "ENCASED FAN", + "block.create.encased_fan.tooltip.summary": "Преобразовывает _силу_ _вращения_ в _воздушный_ _поток_ и обратно. Имеет множество применений.", + "block.create.encased_fan.tooltip.condition1": "При нахождении над огнём", + "block.create.encased_fan.tooltip.behaviour1": "Предоставляет _силу_ _вращения_ (должен стоять вертикально)", + "block.create.encased_fan.tooltip.condition2": "При вращении", + "block.create.encased_fan.tooltip.behaviour2": "_Толкает_ существ с одной стороны, _притягивает_ с другой. Сила и скорость зависят от входящего вращения.", + "block.create.encased_fan.tooltip.condition3": "Когда воздух проходит через специальные блоки", + "block.create.encased_fan.tooltip.behaviour3": "Обрабатывает предметы перед блоком: _вода_ моет, _огонь_ коптит, _лава_ плавит.", + + "block.create.turntable.tooltip": "TURNTABLE", + "block.create.turntable.tooltip.summary": "Преобразует _силу_ _вращения_ прямиком в морскую болезнь.", + + "block.create.crushing_wheel.tooltip": "CRUSHING WHEEL", + "block.create.crushing_wheel.tooltip.summary": "Большие вращающиеся колеса, которые _дробят_ всё, что мешает их движению.", + "block.create.crushing_wheel.tooltip.condition1": "При присоеденении к другому дробильному колесу", + "block.create.crushing_wheel.tooltip.behaviour1": "Формирует дробильную установку для обработки различных вещей. Зубцы колёс должны соединяться и двигаться с _одинаковой_ _скоростью_ в _противоположных_ _направлениях._", + + "block.create.mechanical_press.tooltip": "MECHANICAL PRESS", + "block.create.mechanical_press.tooltip.summary": "Мощный поршень для спрессовывания предметов под ним. Требуется постоянная _сила_ _вращения._", + "block.create.mechanical_press.tooltip.condition1": "Когда запитан", + "block.create.mechanical_press.tooltip.behaviour1": "_Начинает_ спрессовывать предметы под ним.", + "block.create.mechanical_press.tooltip.condition2": "При нахождении над механической лентой", + "block.create.mechanical_press.tooltip.behaviour2": "_Автоматически_ спрессовывает проходящие по ленте предметы.", + + "block.create.mechanical_piston.tooltip": "MECHANICAL PISTON", + "block.create.mechanical_piston.tooltip.summary": "Более продвинутая версия _Поршня,_ использующая _силу_ _вращения_ для более точного перемещения присоединенных конструкций. _Удлинители_ _поршня_ сзади определяют _длину_ устройства. Без удлинителей поршень не будет двигаться. Используйте _Шасси_ _перевода_ для перемещения более чем одной линии блоков.", + "block.create.mechanical_piston.tooltip.condition1": "При вращении", + "block.create.mechanical_piston.tooltip.behaviour1": "Начинает перемещать прикрепленную конструкцию. Скорость и направление зависят от входящего вращения.", + + "block.create.sticky_mechanical_piston.tooltip": "STICKY MECHANICAL PISTON", + "block.create.sticky_mechanical_piston.tooltip.summary": "Более продвинутая версия _Липкого_ _поршня,_ использующая _силу_ _вращения_ для более точного перемещения присоединенных конструкций. _Удлинители_ _поршня_ сзади определяют _длину_ устройства. Без удлинителей поршень не будет двигаться. Используйте _Шасси_ _перевода_ для перемещения более чем одной линии блоков.", + "block.create.sticky_mechanical_piston.tooltip.condition1": "При вращении", + "block.create.sticky_mechanical_piston.tooltip.behaviour1": "Начинает перемещать прикрепленную конструкцию. Скорость и направление зависят от входящего вращения.", + + "block.create.piston_pole.tooltip": "PISTON POLE", + "block.create.piston_pole.tooltip.summary": "Используется для увеличения длины _Механического_ _поршня._", + "block.create.piston_pole.tooltip.condition1": "При присоеденении к механическому поршню", + "block.create.piston_pole.tooltip.behaviour1": "Увеличивает длину поршня на 1 блок", + + "block.create.mechanical_bearing.tooltip": "MECHANICAL BEARING", + "block.create.mechanical_bearing.tooltip.summary": "Используется для вращения _больших_ конструкций_ или генерации _силы_ _вращения_ с помощью ветра.", + "block.create.mechanical_bearing.tooltip.condition1": "При вращении", + "block.create.mechanical_bearing.tooltip.behaviour1": "Начинает вращать присоединенное _Шасси_ _вращения_ и связанные с ним блоки.", + "block.create.mechanical_bearing.tooltip.condition2": "Когда запитан", + "block.create.mechanical_bearing.tooltip.behaviour2": "Начинает предоставлять _силу_ _вращения_ из вращения присоединенной конструкции. Структура должна включать подходящий _парус_ (в настоящее время любой блок шерсти).", + + "block.create.translation_chassis.tooltip": "TRANSLATION CHASSIS", + "block.create.translation_chassis.tooltip.summary": "Настраиваемая основа для конструкций, перемещаемых _Механическим_ _поршнем._ Эти блоки должны формировать первый слой блоков перед поршнем.", + "block.create.translation_chassis.tooltip.condition1": "При движении механическим поршнем", + "block.create.translation_chassis.tooltip.behaviour1": "_Перемещает_ все _прикрепленные_ _Шасси_ с одинаковой ориентацией, и блоки перед ним. При возврате поршня в исходное положение блоки будут втягиваться, только если лицевая сторона шасси _липкая_ (см. [Ctrl]).", + "block.create.translation_chassis.tooltip.control1": "ПКМ со сгустком слизи", + "block.create.translation_chassis.tooltip.action1": "Делает выбранную сторону _липкой._ При возвращении поршня, шасси будет _втягивать_ все подсоединенные блоки в своей колонне и в пределах заданного диапазона.", + + "block.create.rotation_chassis.tooltip": "ROTATION CHASSIS", + "block.create.rotation_chassis.tooltip.summary": "Требуется для вращающихся конструкций с _Механическим_ _подшипником._", + "block.create.rotation_chassis.tooltip.condition1": "При вращении с помощью подшипника", + "block.create.rotation_chassis.tooltip.behaviour1": "_Поворачивает_ все блоки, прикрепленные к _липким_ сторонам (см. [Ctrl]) в пределах заданного диапазона вокруг себя. _Передает_ вращение на присоединенное шасси вращения.", + "block.create.rotation_chassis.tooltip.control1": "ПКМ со сгустком слизи", + "block.create.rotation_chassis.tooltip.action1": "Делает выбранную сторону _липкой._ При вращении, все подсоединенные блоки в пределах заданного диапазона будут вращаться вместе с ним.", + + "block.create.drill.tooltip": "MECHANICAL DRILL", + "block.create.drill.tooltip.summary": "Механическое устройство, пригодное для _разрушения_ _блоков._", + "block.create.drill.tooltip.condition1": "При вращении", + "block.create.drill.tooltip.behaviour1": "Действует как _стационарный_ разрушитель блоков. Также _наносит_ _урон_ _существам_ в рабочей области.", + "block.create.drill.tooltip.condition2": "При движении механическим поршнем", + "block.create.drill.tooltip.behaviour2": "Разрушает блоки, на которые наталкивается.", + + "block.create.harvester.tooltip": "MECHANICAL HARVESTER", + "block.create.harvester.tooltip.summary": "Механический резак для растений, подходящий для автоматизации выращивания средних растений", + "block.create.harvester.tooltip.condition1": "При движении механическим поршнем", + "block.create.harvester.tooltip.behaviour1": "_Срезает_ все _зрелые_ _посевы_ и сбрасывает их в исходное состояние роста.", + + "block.create.stockswitch.tooltip": "STOCKSWITCH", + "block.create.stockswitch.tooltip.summary": "Переключение сигнала на основе _предметов_ и _объёма_ _хранилища_ в прикрепленном контейнере.", + "block.create.stockswitch.tooltip.condition1": "Когда ниже нижнего порога", + "block.create.stockswitch.tooltip.behaviour1": "Перестаёт подавать сигнал", + "block.create.stockswitch.tooltip.condition2": "Когда выше верхнего порога", + "block.create.stockswitch.tooltip.behaviour2": "Начинает подавать _сигнал_ пока не будет достигнут нижний порог", + "block.create.stockswitch.tooltip.control1": "ПКМ", + "block.create.stockswitch.tooltip.action1": "Открывает _Меню_ _настройки_", + + "block.create.redstone_bridge.tooltip": "REDSTONE LINK", + "block.create.redstone_bridge.tooltip.summary": "Конечные точки для _беспроводных_ соединений. Можно выбрать _частоты_ с помощью любого предмета. Диапазон сигнала ограничен, но достаточно далёк.", + "block.create.redstone_bridge.tooltip.condition1": "Когда запитан", + "block.create.redstone_bridge.tooltip.behaviour1": "Получает сигнал на той же _частоте_ и выводит его.", + "block.create.redstone_bridge.tooltip.control1": "ПКМ с предметом", + "block.create.redstone_bridge.tooltip.action1": "Устанавливает _частоту_ для этого звена. Всего для определения частоты можно использовать _2_ _предмета._", + "block.create.redstone_bridge.tooltip.control2": "ПКМ крадясь", + "block.create.redstone_bridge.tooltip.action2": "Переключение между режимами _приёма_ и _передачи._", + + "block.create.contact.tooltip": "REDSTONE CONTACT", + "block.create.contact.tooltip.summary": "Простое устройство для продвинутых механизмов.", + "block.create.contact.tooltip.condition1": "Когда смотрит на другое сигнальное соединение", + "block.create.contact.tooltip.behaviour1": "Подаёт _сигнал_", + "block.create.contact.tooltip.condition2": "При движении механическим поршнем", + "block.create.contact.tooltip.behaviour2": "Включает все стационарные сигнальные соединения, через которые проходит.", + + "block.create.flexcrate.tooltip": "FLEXCRATE", + "block.create.flexcrate.tooltip.summary": "Этот _контейнер_ позволяет контролировать его емкость. Он может содержать до _16_ _стаков_ любого предмета.", + "block.create.flexcrate.tooltip.control1": "ПКМ", + "block.create.flexcrate.tooltip.action1": "Открывает _Меню_", + + "block.create.extractor.tooltip": "EXTRACTOR", + "block.create.extractor.tooltip.summary": "_Извлекает_ _предметы_ из прилагаемого _инвентаря_ и бросает на землю. Не будет бросать предметы до тех пор, пока пространство не освободится. Может быть назначен _фильтр_ в виде стека предметов.", + "block.create.extractor.tooltip.condition1": "Когда запитан", + "block.create.extractor.tooltip.behaviour1": "_Приостанавливает_ экстрактор", + "block.create.extractor.tooltip.control1": "ПКМ по фильтру", + "block.create.extractor.tooltip.action1": "Устанавливает _стек_ _в_ _руке_ в качестве _фильтра._ Экстрактор будет извлекать _определённый_ _предмет_ в _определённом_ _количестве_ по фильтру.", + + "block.create.linked_extractor.tooltip": "LINKED EXTRACTOR", + "block.create.linked_extractor.tooltip.summary": "_Извлекает_ _предметы_ из прилагаемого _инвентаря_ и бросает на землю. Не будет бросать предметы до тех пор, пока пространство не освободится. Может быть назначен _фильтр_ в виде стека предметов. Может управляться дистанционно через _Передатчик_ _сигнала._", + "block.create.linked_extractor.tooltip.condition1": "Когда звено активно", + "block.create.linked_extractor.tooltip.behaviour1": "_Приостанавливает_ экстрактор", + "block.create.linked_extractor.tooltip.control1": "ПКМ по фильтру", + "block.create.linked_extractor.tooltip.action1": "Устанавливает _стек_ _в_ _руке_ в качестве _фильтра._ Экстрактор будет извлекать _определённый_ _предмет_ в _определённом_ _количестве_ по фильтру.", + "block.create.linked_extractor.tooltip.control2": "ПКМ по частоте", + "block.create.linked_extractor.tooltip.action2": "Устанавливает _частоту_ для этого экстрактора. При передаче сигнала с передающего _Сигнального_ _звена_ экстрактор будет приостановлен.", + + "block.create.belt_funnel.tooltip": "BELT FUNNEL", + "block.create.belt_funnel.tooltip.summary": "Собирает входящие предметы на _Механической_ _ленте_ и по возможности кладет их в прилагаемый _инвентарь._ Должен быть непосредственно _над_ лентой, с проёмом, смотрящим против направления ленты. Инвентарь должен быть на той же высоте, что и воронка.", + + "block.create.entity_detector.tooltip": "BELT OBSERVER", + "block.create.entity_detector.tooltip.summary": "Сканирует предметы, проходящие по _Механической_ _ленте_ перед ним. Хорошо работает с _поршнем_ сверху, отталкивающим определенные предметы.", + "block.create.entity_detector.tooltip.condition1": "Когда предмет соответствует фильтру", + "block.create.entity_detector.tooltip.behaviour1": "Подаёт короткий _импульс_ со всех сторон. Пустой фильтр соответствует любому элементу.", + "block.create.entity_detector.tooltip.control1": "ПКМ по фильтру", + "block.create.entity_detector.tooltip.action1": "Устанавливает _предмет_ _в_ _руке_ в качестве _фильтра._ Сканер будет реагировать только на этот предмет.", + + "block.create.pulse_repeater.tooltip": "PULSE REPEATER", + "block.create.pulse_repeater.tooltip.summary": "Простая схема для уменьшения времени проходящего сигнала до _1_ _тика._", + + "block.create.flexpeater.tooltip": "FLEX REPEATER", + "block.create.flexpeater.tooltip.summary": "Продвинутый _Повторитель_ с _настраиваемой_ _задержкой_ вплоть до 30 минут.", + + "itemGroup.create": "Create" +} \ No newline at end of file From b5c2df0b68471dbf97aa83fa5552d15516724001 Mon Sep 17 00:00:00 2001 From: Lucas dos Santos Abreu Date: Wed, 9 Oct 2019 07:51:22 -0300 Subject: [PATCH 2/8] skeleton --- .../resources/assets/create/lang/pt_br.json | 608 ++++++++++++++++++ 1 file changed, 608 insertions(+) create mode 100644 src/main/resources/assets/create/lang/pt_br.json diff --git a/src/main/resources/assets/create/lang/pt_br.json b/src/main/resources/assets/create/lang/pt_br.json new file mode 100644 index 000000000..a1d85e7c8 --- /dev/null +++ b/src/main/resources/assets/create/lang/pt_br.json @@ -0,0 +1,608 @@ +{ + + "_comment": "-------------------------] GAME ELEMENTS [------------------------------------------------", + + "item.create.symmetry_wand": "Staff of Symmetry", + "item.create.placement_handgun": "Handheld Blockzapper", + "item.create.tree_fertilizer": "Tree Fertilizer", + "item.create.empty_blueprint": "Empty Schematic", + "item.create.andesite_alloy_cube": "Andesite Alloy", + "item.create.blaze_brass_cube": "Blaze Brass", + "item.create.chorus_chrome_cube": "Chorus Chrome", + "item.create.chromatic_compound_cube": "Chromatic Compound", + "item.create.shadow_steel_cube": "Shadow Steel", + "item.create.blueprint_and_quill": "Schematic and Quill", + "item.create.blueprint": "Schematic", + "item.create.belt_connector": "Mechanical Belt", + "item.create.filter": "Filter", + "item.create.rose_quartz": "Rose Quartz", + "item.create.refined_rose_quartz": "Refined Rose Quartz", + "item.create.refined_radiance_cube": "Refined Radiance", + "item.create.iron_sheet": "Iron Sheets", + "item.create.gold_sheet": "Gold Sheets", + "item.create.propeller": "Propeller", + "item.create.flour": "Wheat Flour", + "item.create.dough": "Dough", + + "item.create.blazing_pickaxe": "Blazing Pickaxe", + "item.create.blazing_shovel": "Blazing Shovel", + "item.create.blazing_axe": "Blazing Axe", + "item.create.blazing_sword": "Blazing Longsword", + + "item.create.shadow_steel_pickaxe": "Shadow Steel Pickaxe", + "item.create.shadow_steel_mattock": "Shadow Steel Garden Mattock", + "item.create.shadow_steel_sword": "Shadow Steel Sword", + + "item.create.rose_quartz_pickaxe": "Gilded Quartz Pickaxe", + "item.create.rose_quartz_shovel": "Gilded Quartz Shovel", + "item.create.rose_quartz_axe": "Gilded Quartz Axe", + "item.create.rose_quartz_sword": "Gilded Quartz Blade", + + "block.create.cogwheel": "Cogwheel", + "block.create.large_cogwheel": "Large Cogwheel", + "block.create.turntable": "Turntable", + "block.create.gearbox": "Gearbox", + "block.create.gearshift": "Gearshift", + "block.create.clutch": "Clutch", + "block.create.shaft": "Shaft", + "block.create.encased_belt": "Encased Belt", + "block.create.encased_shaft": "Encased Shaft", + "block.create.encased_fan": "Encased Fan", + "block.create.motor": "Motor", + "block.create.belt": "Mechanical Belt", + "block.create.crushing_wheel": "Crushing Wheel", + "block.create.drill": "Mechanical Drill", + "block.create.harvester": "Mechanical Harvester", + "block.create.water_wheel": "Water Wheel", + "block.create.belt_support": "Belt Support", + "block.create.mechanical_press": "Mechanical Press", + + "block.create.sticky_mechanical_piston": "Sticky Mechanical Piston", + "block.create.mechanical_piston": "Mechanical Piston", + "block.create.mechanical_piston_head": "Mechanical Piston Head", + "block.create.piston_pole": "Piston Extension Pole", + "block.create.mechanical_bearing": "Mechanical Bearing", + "block.create.translation_chassis": "Translation Chassis", + "block.create.rotation_chassis": "Rotation Chassis", + + "block.create.contact": "Redstone Contact", + "block.create.redstone_bridge": "Redstone Link", + "block.create.stockswitch": "Stockpile Switch", + "block.create.flexcrate": "FlexCrate", + "block.create.extractor": "Extractor", + "block.create.belt_funnel": "Belt Funnel", + "block.create.linked_extractor": "Linked Extractor", + "block.create.pulse_repeater": "Pulse Repeater", + "block.create.flexpeater": "FlexPeater", + "block.create.entity_detector": "Belt Observer", + + "block.create.tiled_glass": "Tiled Glass", + "block.create.tiled_glass_pane": "Tiled Glass Pane", + + "block.create.window_in_a_block": "Block with Glass Pane", + "block.create.andesite_bricks": "Andesite Bricks", + "block.create.diorite_bricks": "Diorite Bricks", + "block.create.granite_bricks": "Granite Bricks", + + "block.create.gabbro": "Gabbro", + "block.create.gabbro_stairs": "Gabbro Stairs", + "block.create.gabbro_slab": "Gabbro Slab", + "block.create.gabbro_wall": "Gabbro Wall", + "block.create.polished_gabbro": "Polished Gabbro", + "block.create.gabbro_bricks": "Gabbro Bricks", + "block.create.gabbro_bricks_stairs": "Gabbro Brick Stairs", + "block.create.gabbro_bricks_wall": "Gabbro Brick Wall", + "block.create.paved_gabbro_bricks": "Paved Gabbro Bricks", + "block.create.paved_gabbro_bricks_slab": "Paved Gabbro Bricks Slab", + "block.create.indented_gabbro": "Indented Gabbro Tile", + "block.create.indented_gabbro_slab": "Indented Gabbro Slab", + "block.create.slightly_mossy_gabbro_bricks": "Mossy Gabbro Bricks", + "block.create.mossy_gabbro_bricks": "Overgrown Gabbro Bricks", + + "block.create.weathered_limestone": "Weathered Limestone", + "block.create.weathered_limestone_stairs": "Weathered Limestone Stairs", + "block.create.weathered_limestone_wall": "Weathered Limestone Wall", + "block.create.weathered_limestone_slab": "Weathered Limestone Slab", + "block.create.polished_weathered_limestone": "Polished Weathered Limestone", + "block.create.polished_weathered_limestone_slab": "Polished Weathered Limestone Slab", + "block.create.weathered_limestone_bricks": "Weathered Limestone Bricks", + "block.create.weathered_limestone_bricks_stairs": "Weathered Limestone Brick Stairs", + "block.create.weathered_limestone_bricks_wall": "Weathered Limestone Brick Wall", + "block.create.weathered_limestone_bricks_slab": "Weathered Limestone Brick Slab", + "block.create.weathered_limestone_pillar": "Weathered Limestone Pillar", + + "block.create.dolomite_pillar": "Dolomite Pillar", + "block.create.dolomite": "Dolomite", + "block.create.dolomite_stairs": "Dolomite Stairs", + "block.create.dolomite_wall": "Dolomite Wall", + "block.create.dolomite_slab": "Dolomite Slab", + "block.create.dolomite_bricks": "Dolomite Bricks", + "block.create.dolomite_bricks_wall": "Dolomite Brick Wall", + "block.create.dolomite_bricks_stairs": "Dolomite Brick Stairs", + "block.create.dolomite_bricks_slab": "Dolomite Brick Slab", + "block.create.polished_dolomite": "Polished Dolomite", + + "block.create.limesand": "Limesand", + "block.create.limestone": "Limestone", + "block.create.limestone_stairs": "Limestone Stairs", + "block.create.limestone_slab": "Limestone Slab", + "block.create.limestone_wall": "Limestone Wall", + "block.create.limestone_bricks": "Limestone Bricks", + "block.create.limestone_bricks_stairs": "Limestone Brick Stairs", + "block.create.limestone_bricks_slab": "Limestone Brick Slab", + "block.create.limestone_bricks_wall": "Limestone Brick Wall", + "block.create.polished_limestone": "Polished Limestone", + "block.create.polished_limestone_slab": "Polished Limestone Slab", + "block.create.limestone_pillar": "Limestone Pillar", + + "block.create.schematicannon": "Schematicannon", + "block.create.schematic_table": "Schematic Table", + "block.create.creative_crate": "Schematicannon Creatifier", + + "block.create.cocoa_log": "Cocoa Jungle Log", + + "block.create.shop_shelf": "Shelf", + + "_comment": "-------------------------] UI & MESSAGES [------------------------------------------------", + + "death.attack.create.crush": "%1$s was processed by Crushing Wheels", + "death.attack.create.fan_fire": "%1$s was burned to death by hot air", + "death.attack.create.fan_lava": "%1$s was burned to death by lava fan", + "death.attack.create.drill": "%1$s was impaled by Mechanical Drill", + + "create.recipe.crushing": "Crushing", + "create.recipe.splashing": "Bulk Washing", + "create.recipe.splashing.fan": "Fan behind Flowing Water", + "create.recipe.smokingViaFan": "Bulk Smoking", + "create.recipe.smokingViaFan.fan": "Fan behind Fire", + "create.recipe.blastingViaFan": "Bulk Smelting", + "create.recipe.blastingViaFan.fan": "Fan behind Lava", + "create.recipe.pressing": "Mechanical Press", + "create.recipe.blockzapperUpgrade": "Handheld Blockzapper", + "create.recipe.processing.chance": "%1$s%% Chance", + + "create.generic.range": "Range", + "create.generic.radius": "Radius", + "create.generic.speed": "Speed", + "create.generic.delay": "Delay", + "create.generic.unit.ticks": "Ticks", + "create.generic.unit.seconds": "Seconds", + "create.generic.unit.minutes": "Minutes", + + "create.action.scroll": "Scroll", + "create.action.confirm": "Confirm", + "create.action.abort": "Abort", + "create.action.saveToFile": "Save", + "create.action.discard": "Discard", + + "create.keyinfo.toolmenu": "Focus Tool Menu", + + "create.gui.scrollInput.defaultTitle": "Choose an Option:", + "create.gui.scrollInput.scrollToModify": "Scroll to Modify", + "create.gui.scrollInput.scrollToSelect": "Scroll to Select", + "create.gui.scrollInput.shiftScrollsFaster": "Shift to Scroll faster", + + "create.gui.toolmenu.focusKey": "Hold [%1$s] to Focus", + "create.gui.toolmenu.cycle": "[SCROLL] to Cycle", + + "create.gui.symmetryWand.mirrorType": "Mirror", + "create.gui.symmetryWand.orientation": "Orientation", + "create.symmetry.mirror.plane": "Mirror once", + "create.symmetry.mirror.doublePlane": "Rectangular", + "create.symmetry.mirror.triplePlane": "Octagonal", + "create.orientation.orthogonal": "Orthogonal", + "create.orientation.diagonal": "Diagonal", + "create.orientation.horizontal": "Horizontal", + "create.orientation.alongZ": "Along Z", + "create.orientation.alongX": "Along X", + + "create.gui.blockzapper.title": "Handheld Blockzapper", + "create.gui.blockzapper.replaceMode": "Replace Mode", + "create.gui.blockzapper.searchDiagonal": "Follow Diagonals", + "create.gui.blockzapper.searchFuzzy": "Ignore Material Borders", + "create.gui.blockzapper.range": "Spread Range", + "create.gui.blockzapper.patternSection": "Patterns", + "create.gui.blockzapper.pattern.solid": "Solid", + "create.gui.blockzapper.pattern.checkered": "Checkerboard", + "create.gui.blockzapper.pattern.inversecheckered": "Inversed Checkerboard", + "create.gui.blockzapper.pattern.chance25": "25% Roll", + "create.gui.blockzapper.pattern.chance50": "50% Roll", + "create.gui.blockzapper.pattern.chance75": "75% Roll", + + "create.blockzapper.usingBlock": "Using: %1$s", + "create.blockzapper.componentUpgrades": "Component Upgrades:", + "create.blockzapper.component.body": "Body", + "create.blockzapper.component.amplifier": "Amplifier", + "create.blockzapper.component.accelerator": "Accelerator", + "create.blockzapper.component.retriever": "Retriever", + "create.blockzapper.component.scope": "Scope", + "create.blockzapper.componentTier.none": "None", + "create.blockzapper.componentTier.blazebrass": "Blaze Brass", + "create.blockzapper.componentTier.choruschrome": "Chorus Chrome", + "create.blockzapper.leftClickToSet": "Left-Click a Block to set Material", + "create.blockzapper.empty": "Out of Blocks!", + + "create.logistics.filter": "Filter", + "create.logistics.firstFrequency": "Freq. #1", + "create.logistics.secondFrequency": "Freq. #2", + + "create.gui.flexcrate.title": "FlexCrate", + "create.gui.flexcrate.storageSpace": "Storage Space", + + "create.gui.stockswitch.title": "Stockpile Switch", + "create.gui.stockswitch.lowerLimit": "Lower Threshold", + "create.gui.stockswitch.upperLimit": "Upper Threshold", + "create.gui.stockswitch.startAt": "Start Signal at", + "create.gui.stockswitch.startAbove": "Start Signal above", + "create.gui.stockswitch.stopAt": "Stop Signal at", + "create.gui.stockswitch.stopBelow": "Stop Signal below", + + "create.schematicAndQuill.dimensions": "Schematic Size: %1$sx%2$sx%3$s", + "create.schematicAndQuill.firstPos": "First position set.", + "create.schematicAndQuill.secondPos": "Second position set.", + "create.schematicAndQuill.noTarget": "Hold [Ctrl] to select Air blocks.", + "create.schematicAndQuill.abort": "Removed selection.", + "create.schematicAndQuill.prompt": "Enter a name for the Schematic:", + "create.schematicAndQuill.fallbackName": "My Schematic", + "create.schematicAndQuill.saved": "Saved as %1$s", + + "create.schematic.invalid": "[!] Invalid Item - Use the Schematic Table instead", + "create.schematic.position": "Position", + "create.schematic.rotation": "Rotation", + "create.schematic.rotation.none": "None", + "create.schematic.rotation.cw90": "Clockwise 90", + "create.schematic.rotation.cw180": "Clockwise 180", + "create.schematic.rotation.cw270": "Clockwise 270", + "create.schematic.mirror": "Mirror", + "create.schematic.mirror.none": "None", + "create.schematic.mirror.frontBack": "Front-Back", + "create.schematic.mirror.leftRight": "Left-Right", + + "create.schematic.tool.deploy": "Deploy", + "create.schematic.tool.move": "Move XZ", + "create.schematic.tool.movey": "Move Y", + "create.schematic.tool.rotate": "Rotate", + "create.schematic.tool.print": "Print", + "create.schematic.tool.flip": "Flip", + + "create.schematic.tool.deploy.description.0": "Moves the structure to a location.", + "create.schematic.tool.deploy.description.1": "Right-Click on the ground to place.", + "create.schematic.tool.deploy.description.2": "Hold [Ctrl] to select at a fixed distance.", + "create.schematic.tool.deploy.description.3": "[Ctrl]-Scroll to change the distance.", + "create.schematic.tool.move.description.0": "Shifts the Schematic Horizontally", + "create.schematic.tool.move.description.1": "Point at the Schematic and [CTRL]-Scroll to push it.", + "create.schematic.tool.move.description.2": "", + "create.schematic.tool.move.description.3": "", + "create.schematic.tool.movey.description.0": "Shifts the Schematic Vertically", + "create.schematic.tool.movey.description.1": "[CTRL]-Scroll to move it up/down", + "create.schematic.tool.movey.description.2": "", + "create.schematic.tool.movey.description.3": "", + "create.schematic.tool.rotate.description.0": "Rotates the Schematic around its center.", + "create.schematic.tool.rotate.description.1": "[CTRL]-Scroll to rotate by 90 Degrees", + "create.schematic.tool.rotate.description.2": "", + "create.schematic.tool.rotate.description.3": "", + "create.schematic.tool.print.description.0": "Instantly places the structure in the world", + "create.schematic.tool.print.description.1": "[Right-Click] to confirm placement at the current location.", + "create.schematic.tool.print.description.2": "This tool is for Creative Mode only.", + "create.schematic.tool.print.description.3": "", + "create.schematic.tool.flip.description.0": "Flips the Schematic along the face you select.", + "create.schematic.tool.flip.description.1": "Point at the Schematic and [CTRL]-Scroll to flip it.", + "create.schematic.tool.flip.description.2": "", + "create.schematic.tool.flip.description.3": "", + + "create.schematics.synchronizing": "Syncing...", + "create.schematics.uploadTooLarge": "Your schematic is too large", + "create.schematics.maxAllowedSize": "The maximum allowed schematic file size is:", + + "create.gui.schematicTable.title": "Schematic Table", + "create.gui.schematicTable.availableSchematics": "Available Schematics", + "create.gui.schematicTable.noSchematics": "No Schematics Saved", + "create.gui.schematicTable.uploading": "Uploading...", + "create.gui.schematicTable.finished": "Upload Finished!", + + "create.gui.schematicannon.title": "Schematicannon", + "create.gui.schematicannon.settingsTitle": "Placement Settings", + "create.gui.schematicannon.listPrinter": "Material List Printer", + "create.gui.schematicannon.gunpowderLevel": "Gunpowder at %1$s%%", + "create.gui.schematicannon.shotsRemaining": "Shots left: %1$s", + "create.gui.schematicannon.shotsRemainingWithBackup": "With backup: %1$s", + "create.gui.schematicannon.optionEnabled": "Currently Enabled", + "create.gui.schematicannon.optionDisabled": "Currently Disabled", + "create.gui.schematicannon.option.dontReplaceSolid": "Don't Replace Solid Blocks", + "create.gui.schematicannon.option.replaceWithSolid": "Replace Solid with Solid", + "create.gui.schematicannon.option.replaceWithAny": "Replace Solid with Any", + "create.gui.schematicannon.option.replaceWithEmpty": "Replace Solid with Empty", + "create.gui.schematicannon.option.skipMissing": "Skip missing Blocks", + "create.gui.schematicannon.option.skipTileEntities": "Protect Tile Entities", + + "create.gui.schematicannon.option.skipMissing.description": "If the Schematicannon cannot find a required Block for placement, it will continue at the next Location.", + "create.gui.schematicannon.option.skipTileEntities.description": "The Schematicannon will avoid replacing data holding blocks such as Chests.", + "create.gui.schematicannon.option.dontReplaceSolid.description": "The cannon will never replace any Solid blocks in its working area, only non-Solid and Air.", + "create.gui.schematicannon.option.replaceWithSolid.description": "The cannon will only replace Solid blocks in its working area, if the Schematic contains a solid Block at their location.", + "create.gui.schematicannon.option.replaceWithAny.description": "The cannon will replace Solid blocks in its working area, if the Schematic contains any Block at their location.", + "create.gui.schematicannon.option.replaceWithEmpty.description": "The cannon will clear out all blocks in its working area, including those replaced by Air.", + + "create.schematicannon.status.idle": "Idle", + "create.schematicannon.status.ready": "Ready", + "create.schematicannon.status.running": "Running", + "create.schematicannon.status.finished": "Finished", + "create.schematicannon.status.paused": "Paused", + "create.schematicannon.status.stopped": "Stopped", + "create.schematicannon.status.noGunpowder": "Out of Gunpowder", + "create.schematicannon.status.targetNotLoaded": "Block is not loaded", + "create.schematicannon.status.targetOutsideRange": "Target too Far Away", + "create.schematicannon.status.searching": "Searching", + "create.schematicannon.status.skipping": "Skipping", + "create.schematicannon.status.missingBlock": "Missing Block:", + "create.schematicannon.status.placing": "Placing", + "create.schematicannon.status.clearing": "Clearing Blocks", + "create.schematicannon.status.schematicInvalid": "Schematic Invalid", + "create.schematicannon.status.schematicNotPlaced": "Schematic not Deployed", + "create.schematicannon.status.schematicExpired": "Schematic File Expired", + + "create.tooltip.holdKey": "Hold [%1$s]", + "create.tooltip.holdKeyOrKey": "Hold [%1$s] or [%2$s]", + "create.tooltip.keyShift": "Shift", + "create.tooltip.keyCtrl": "Ctrl", + + "_comment": "-------------------------] ITEM DESCRIPTIONS [------------------------------------------------", + + "item.create.example_item.tooltip": "EXAMPLE ITEM (just a marker that this tooltip exists)", + "item.create.example_item.tooltip.summary": "A brief description of the item. _Underscores_ highlight a term.", + "item.create.example_item.tooltip.condition1": "When this", + "item.create.example_item.tooltip.behaviour1": "Then this item does this. (behaviours show on shift)", + "item.create.example_item.tooltip.condition2": "And When this", + "item.create.example_item.tooltip.behaviour2": "You can add as many behaviours as you like", + "item.create.example_item.tooltip.control1": "When Ctrl pressed", + "item.create.example_item.tooltip.action1": "These controls are displayed.", + + "item.create.symmetry_wand.tooltip": "SYMMETRY WAND", + "item.create.symmetry_wand.tooltip.summary": "Perfectly mirrors your Block placement across the configured planes.", + "item.create.symmetry_wand.tooltip.condition1": "When in Hotbar", + "item.create.symmetry_wand.tooltip.behaviour1": "Stays Active", + "item.create.symmetry_wand.tooltip.control1": "R-Click on Ground", + "item.create.symmetry_wand.tooltip.action1": "_Creates_ or _Moves_ the Mirror", + "item.create.symmetry_wand.tooltip.control2": "R-Click in the Air", + "item.create.symmetry_wand.tooltip.action2": "_Removes_ the active Mirror", + "item.create.symmetry_wand.tooltip.control3": "R-Click while Sneaking", + "item.create.symmetry_wand.tooltip.action3": "Opens the _Configuration_ _Interface_", + + "item.create.placement_handgun.tooltip": "BLOCKZAPPER", + "item.create.placement_handgun.tooltip.summary": "Novel gadget for placing or exchanging blocks at a distance.", + "item.create.placement_handgun.tooltip.control1": "L-Click at Block", + "item.create.placement_handgun.tooltip.action1": "Sets blocks placed by the tool to the targeted block.", + "item.create.placement_handgun.tooltip.control2": "R-Click at Block", + "item.create.placement_handgun.tooltip.action2": "_Places_ or _Replaces_ the targeted block.", + "item.create.placement_handgun.tooltip.control3": "R-Click while Sneaking", + "item.create.placement_handgun.tooltip.action3": "Opens the _Configuration_ _Interface_", + + "item.create.tree_fertilizer.tooltip": "TREE FERTILIZER", + "item.create.tree_fertilizer.tooltip.summary": "A powerful combination of minerals suitable for common tree types", + "item.create.tree_fertilizer.tooltip.condition1": "When used on Sapling", + "item.create.tree_fertilizer.tooltip.behaviour1": "Grows Trees regardless of their spacing Conditions", + + "block.create.cocoa_log.tooltip": "COCOA LOG", + "block.create.cocoa_log.tooltip.summary": "An augmented jungle log allowing for easier automation of _Cocoa_ _Beans_", + "block.create.cocoa_log.tooltip.condition1": "When Mature", + "block.create.cocoa_log.tooltip.behaviour1": "Grows _Cocoa_ _Pods_ on all sides", + + "item.create.empty_blueprint.tooltip": "EMPTY SCHEMATIC", + "item.create.empty_blueprint.tooltip.summary": "Used as a recipe ingredient and for writing at the _Schematic_ _Table_", + + "item.create.blueprint.tooltip": "SCHEMATIC", + "item.create.blueprint.tooltip.summary": "Holds a structure to be positioned and placed into the world. Position the Hologram as desired and use a _Schematicannon_ to build it.", + "item.create.blueprint.tooltip.condition1": "When Held", + "item.create.blueprint.tooltip.behaviour1": "Can be positioned using the Tools on Screen", + "item.create.blueprint.tooltip.control1": "R-Click while Sneaking", + "item.create.blueprint.tooltip.action1": "Opens an _Interface_ for entering exact _Coordinates._", + + "item.create.blueprint_and_quill.tooltip": "SCHEMATIC AND QUILL", + "item.create.blueprint_and_quill.tooltip.summary": "Used for saving a Structure in your world to a .nbt file.", + "item.create.blueprint_and_quill.tooltip.condition1": "Step 1", + "item.create.blueprint_and_quill.tooltip.behaviour1": "Select two corner points using R-Click", + "item.create.blueprint_and_quill.tooltip.condition2": "Step 2", + "item.create.blueprint_and_quill.tooltip.behaviour2": "_Ctrl-Scroll_ on the faces to adjust the size. R-Click again to Save.", + "item.create.blueprint_and_quill.tooltip.control1": "R-Click", + "item.create.blueprint_and_quill.tooltip.action1": "Select a corner point / confirm save", + "item.create.blueprint_and_quill.tooltip.control2": "Ctrl Held", + "item.create.blueprint_and_quill.tooltip.action2": "Select points in _mid-air_. _Scroll_ to adjust the distance.", + "item.create.blueprint_and_quill.tooltip.control3": "R-Click while Sneaking", + "item.create.blueprint_and_quill.tooltip.action3": "_Resets_ and removes the selection.", + + "block.create.creative_crate.tooltip": "CREATIVE CRATE", + "block.create.creative_crate.tooltip.summary": "Provides an endless supply of blocks to adjacent _Schematicannons_", + + "block.create.schematicannon.tooltip": "SCHEMATICANNON", + "block.create.schematicannon.tooltip.summary": "Shoots blocks to recreate a deployed _Schematic_ in the World. Uses items from adjacent Inventories and _Gunpowder_ as fuel.", + "block.create.schematicannon.tooltip.control1": "When R-Clicked", + "block.create.schematicannon.tooltip.action1": "Opens the _Interface_", + + "block.create.schematic_table.tooltip": "SCHEMATIC TABLE", + "block.create.schematic_table.tooltip.summary": "Writes saved Schematics onto an _Empty_ _Schematic_", + "block.create.schematic_table.tooltip.condition1": "When given an Empty Schematic", + "block.create.schematic_table.tooltip.behaviour1": "Uploads a chosen File from your Schematics Folder", + + "block.create.shaft.tooltip": "SHAFT", + "block.create.shaft.tooltip.summary": "_Relays_ _Rotation_ in a straight line.", + + "block.create.cogwheel.tooltip": "COGWHEEL", + "block.create.cogwheel.tooltip.summary": "_Relays_ _Rotation_ in a straigt line, and to adjacent _Cogwheels._", + + "block.create.large_cogwheel.tooltip": "LARGE COGWHEEL", + "block.create.large_cogwheel.tooltip.summary": "A larger version of the _Cogwheel,_ allowing for _change_ in _Rotation_ _Speed_ when connected to its smaller Counterpart.", + + "block.create.encased_shaft.tooltip": "ENCASED SHAFT", + "block.create.encased_shaft.tooltip.summary": "_Relays_ _Rotation_ in a straight line. Suitable for propagating Rotation through Walls.", + + "block.create.gearbox.tooltip": "GEARBOX", + "block.create.gearbox.tooltip.summary": "_Relays_ _Rotation_ to _Four_ _directions._ Reverses straight connections.", + + "block.create.gearshift.tooltip": "GEARSHIFT", + "block.create.gearshift.tooltip.summary": "A controllable _rotation_ _switch_ for connected shafts.", + "block.create.gearshift.tooltip.condition1": "When Powered", + "block.create.gearshift.tooltip.behaviour1": "_Reverses_ the outgoing rotation.", + + "block.create.clutch.tooltip": "CLUTCH", + "block.create.clutch.tooltip.summary": "A controllable _rotation_ _switch_ for connected shafts.", + "block.create.clutch.tooltip.condition1": "When Powered", + "block.create.clutch.tooltip.behaviour1": "_Stops_ conveying rotation to the other side.", + + "block.create.encased_belt.tooltip": "ENCASED_BELT", + "block.create.encased_belt.tooltip.summary": "_Relays_ _Rotation_ through its block and to an attached _Encased_ _Belt._", + "block.create.encased_belt.tooltip.condition1": "When Attached to other Encased Belt", + "block.create.encased_belt.tooltip.behaviour1": "Attached Block will have the exact same rotation speed and direction. Attached Belts do not have to face the same way.", + + "item.create.belt_connector.tooltip": "BELT CONNECTOR", + "item.create.belt_connector.tooltip.summary": "Connects two _Shafts_ with a _Mechanical_ _Belt._ Connected shafts will have the exact same rotation speed and direction. The Belt can act as a _Conveyor_ for _Entities._", + "item.create.belt_connector.tooltip.control1": "R-Clicked on Shaft", + "item.create.belt_connector.tooltip.action1": "Selects the shaft as one pulley of the Belt. Both selected Shafts have to _line_ _up_ either _Vertically,_ _Horizontally_ or _Diagonally_ towards the Belt's Direction.", + "item.create.belt_connector.tooltip.control2": "R-Click while Sneaking", + "item.create.belt_connector.tooltip.action2": "_Resets_ the first selected position for the Belt", + + "block.create.belt_support.tooltip": "BELT SUPPORT", + "block.create.belt_support.tooltip.summary": "A _purely_ _decorational_ block suitable for mounting _Mechanical_ _Belts_ to the Ground.", + "block.create.belt_support.tooltip.condition1": "When placed below a Belt", + "block.create.belt_support.tooltip.behaviour1": "Supports the top of the Belt, hiding the bottom layer.", + + "block.create.motor.tooltip": "MOTOR", + "block.create.motor.tooltip.summary": "A configurable source of _Rotational_ _Force_", + + "block.create.water_wheel.tooltip": "WATER WHEEL", + "block.create.water_wheel.tooltip.summary": "Provides _Rotational_ _Force_ taken from adjacent _Water_ _Currents._", + + "block.create.encased_fan.tooltip": "ENCASED FAN", + "block.create.encased_fan.tooltip.summary": "Converts _Rotational_ _Force_ to _Air_ _Currents_ and back. Has a variety of uses.", + "block.create.encased_fan.tooltip.condition1": "When above Fire", + "block.create.encased_fan.tooltip.behaviour1": "Provides _Rotational_ _Force_ (has to be vertical)", + "block.create.encased_fan.tooltip.condition2": "When Rotated", + "block.create.encased_fan.tooltip.behaviour2": "_Pushes_ Entities on one side, _Pulls_ on the other. Force and Speed depend on incoming Rotations.", + "block.create.encased_fan.tooltip.condition3": "When air flows through special blocks", + "block.create.encased_fan.tooltip.behaviour3": "Processes items in front of the Block: _Water_ washes, _Fire_ smokes and _Lava_ smelts the ingredient.", + + "block.create.turntable.tooltip": "TURNTABLE", + "block.create.turntable.tooltip.summary": "Turns _Rotational_ _Force_ into refined Motion Sickness.", + + "block.create.crushing_wheel.tooltip": "CRUSHING WHEEL", + "block.create.crushing_wheel.tooltip.summary": "Large rotatable wheels that _break_ _down_ anything stopping their motion.", + "block.create.crushing_wheel.tooltip.condition1": "When attached to other Crushing Wheel", + "block.create.crushing_wheel.tooltip.behaviour1": "Forms a crushing setup for processing a variety of things. The Wheels' teeth have to connect and moving with the _same_ _speed_ in _opposite_ _directions._", + + "block.create.mechanical_press.tooltip": "MECHANICAL PRESS", + "block.create.mechanical_press.tooltip.summary": "A forceful piston for compressing items beneath it. Requires constant _Rotational_ _Force._", + "block.create.mechanical_press.tooltip.condition1": "When Powered by Redstone", + "block.create.mechanical_press.tooltip.behaviour1": "_Starts_ to compress items dropped below it.", + "block.create.mechanical_press.tooltip.condition2": "When Above a Mechanical Belt", + "block.create.mechanical_press.tooltip.behaviour2": "_Automatically_ compresses bypassing items on the Belt.", + + "block.create.mechanical_piston.tooltip": "MECHANICAL PISTON", + "block.create.mechanical_piston.tooltip.summary": "A more advanced version of the _Piston,_ using _Rotational_ _Force_ to precisely move attached structures. _Piston_ _Extension_ _Poles_ at the rear define the _Range_ of this Device. Without extensions, the piston will not move. Use _Translation_ _Chassis_ to move more than a single line of blocks.", + "block.create.mechanical_piston.tooltip.condition1": "When Rotated", + "block.create.mechanical_piston.tooltip.behaviour1": "Starts moving the attached structure. Speed and direction correlate to the incoming Rotation Speed.", + + "block.create.sticky_mechanical_piston.tooltip": "STICKY MECHANICAL PISTON", + "block.create.sticky_mechanical_piston.tooltip.summary": "A more advanced version of the _Sticky_ _Piston,_ using _Rotational_ _Force_ to precisely move attached structures. _Piston_ _Extension_ _Poles_ at the rear define the _Range_ of this Device. Without extensions, the piston will not move. Use _Translation_ _Chassis_ to move more than a single line of blocks.", + "block.create.sticky_mechanical_piston.tooltip.condition1": "When Rotated", + "block.create.sticky_mechanical_piston.tooltip.behaviour1": "Starts moving the attached structure. Speed and direction correlate to the incoming Rotation Speed.", + + "block.create.piston_pole.tooltip": "PISTON POLE", + "block.create.piston_pole.tooltip.summary": "Used to increase the extension range of _Mechanical_ _Pistons_", + "block.create.piston_pole.tooltip.condition1": "When attached to Mechanical Piston", + "block.create.piston_pole.tooltip.behaviour1": "Extends the pistons extension range by 1 block", + + "block.create.mechanical_bearing.tooltip": "MECHANICAL BEARING", + "block.create.mechanical_bearing.tooltip.summary": "Used for rotating _larger_ _structures_ or generating _Rotational_ _Force_ from wind.", + "block.create.mechanical_bearing.tooltip.condition1": "When Rotated", + "block.create.mechanical_bearing.tooltip.behaviour1": "Starts physically rotating attached _Rotation_ _Chassis_ and their attached blocks respectively.", + "block.create.mechanical_bearing.tooltip.condition2": "When Powered by Redstone", + "block.create.mechanical_bearing.tooltip.behaviour2": "Starts providing _Rotational_ _Force_ from rotating its attached structure. The Structure has to include suitable _Sail_ _Blocks_ (Currently any Wool Block).", + + "block.create.translation_chassis.tooltip": "TRANSLATION CHASSIS", + "block.create.translation_chassis.tooltip.summary": "A configurable base for Structures moved by a _Mechanical_ _Piston._ These Blocks have to form the first Layer of blocks in front of the Piston.", + "block.create.translation_chassis.tooltip.condition1": "When Moved by Mechanical Piston", + "block.create.translation_chassis.tooltip.behaviour1": "_Moves_ all _attached_ _Chassis_ with the same orientation, and attached Blocks in front of it. When the Piston retracts, blocks will only be pulled if the chassis' face is _Sticky_ (See [Ctrl]).", + "block.create.translation_chassis.tooltip.control1": "When R-Clicked with Slime Ball", + "block.create.translation_chassis.tooltip.action1": "Makes the clicked face _Sticky._ When the piston retracts, the chassis will _pull_ _back_ all attached Blocks in its column and within the configured Range.", + + "block.create.rotation_chassis.tooltip": "ROTATION CHASSIS", + "block.create.rotation_chassis.tooltip.summary": "Required for rotating structures with the _Mechanical_ _Bearing._ ", + "block.create.rotation_chassis.tooltip.condition1": "When Rotated by Bearing", + "block.create.rotation_chassis.tooltip.behaviour1": "_Rotates_ all blocks attached to _Sticky_ sides (See [Ctrl]) within the configured range around itself. _Transmits_ the rotation to further attached Rotation Chassis.", + "block.create.rotation_chassis.tooltip.control1": "When R-Clicked with Slime Ball", + "block.create.rotation_chassis.tooltip.action1": "Makes the clicked face _Sticky._ When the Chassis rotates, all blocks attached to this side will be rotated with it.", + + "block.create.drill.tooltip": "MECHANICAL DRILL", + "block.create.drill.tooltip.summary": "A mechanical device suitable for _breaking_ _blocks._", + "block.create.drill.tooltip.condition1": "When Rotated", + "block.create.drill.tooltip.behaviour1": "Acts as a _stationary_ Block Breaker. Also _hurts_ _entities_ in its effective area.", + "block.create.drill.tooltip.condition2": "When Pushed by Mechanical Piston", + "block.create.drill.tooltip.behaviour2": "Breaks Blocks the drill is running into.", + + "block.create.harvester.tooltip": "MECHANICAL HARVESTER", + "block.create.harvester.tooltip.summary": "A mechanical plant cutter suitable for medium scale crop automation", + "block.create.harvester.tooltip.condition1": "When Pushed by Mechanical Piston", + "block.create.harvester.tooltip.behaviour1": "_Harvests_ all _mature_ _crops_ the blade is running into, and resets them to their initial growth state.", + + "block.create.stockswitch.tooltip": "STOCKSWITCH", + "block.create.stockswitch.tooltip.summary": "Toggles a Redstone signal based on the _Storage_ _Space_ in the attached Container.", + "block.create.stockswitch.tooltip.condition1": "When below Lower Limit", + "block.create.stockswitch.tooltip.behaviour1": "Stops providing _Redstone_ _Power_", + "block.create.stockswitch.tooltip.condition2": "When above Upper Limit", + "block.create.stockswitch.tooltip.behaviour2": "Starts providing _Redstone_ _Power_ until Lower Limit is reached again.", + "block.create.stockswitch.tooltip.control1": "When R-Clicked", + "block.create.stockswitch.tooltip.action1": "Opens the _Configuration_ _Interface_", + + "block.create.redstone_bridge.tooltip": "REDSTONE LINK", + "block.create.redstone_bridge.tooltip.summary": "Endpoints for _Wireless_ _Redstone_ connections. Can be assigned _Frequencies_ using any item. Signal range is limited, but reasonably far.", + "block.create.redstone_bridge.tooltip.condition1": "When Powered", + "block.create.redstone_bridge.tooltip.behaviour1": "Receiving Links of the same _Frequency_ will provide a Redstone signal.", + "block.create.redstone_bridge.tooltip.control1": "When R-Clicked with an Item", + "block.create.redstone_bridge.tooltip.action1": "Sets the _Frequency_ to that item. A total of _two_ _different_ _items_ can be used in combination for defining a Frequency.", + "block.create.redstone_bridge.tooltip.control2": "When R-Clicked while Sneaking", + "block.create.redstone_bridge.tooltip.action2": "Toggles between _Receiver_ and _Transmitter_ Mode.", + + "block.create.contact.tooltip": "REDSTONE CONTACT", + "block.create.contact.tooltip.summary": "A simple device for advanced Redstone Contraptions.", + "block.create.contact.tooltip.condition1": "When facing other Contact", + "block.create.contact.tooltip.behaviour1": "Provides a _Redstone_ _Signal_", + "block.create.contact.tooltip.condition2": "When moved by Mechanical Piston", + "block.create.contact.tooltip.behaviour2": "Triggers all stationary Contacts passing by", + + "block.create.flexcrate.tooltip": "FLEXCRATE", + "block.create.flexcrate.tooltip.summary": "This _Storage_ _Container_ allows Manual control over its capacity. It can hold up to _16_ _Stacks_ of any Item", + "block.create.flexcrate.tooltip.control1": "When R-Clicked", + "block.create.flexcrate.tooltip.action1": "Opens the _Interface_", + + "block.create.extractor.tooltip": "EXTRACTOR", + "block.create.extractor.tooltip.summary": "_Takes_ _items_ from an attached _Inventory_ and drops them onto the ground. Will not drop Items until the space cleared. Can be assigned an item-stack as a _filter._", + "block.create.extractor.tooltip.condition1": "When Powered by Redstone", + "block.create.extractor.tooltip.behaviour1": "_Pauses_ the Extractor", + "block.create.extractor.tooltip.control1": "R-Click on Filter Space", + "block.create.extractor.tooltip.action1": "Assigns currently _held_ _stack_ as the _Filter._ Extractor will pull the item _type_ and _count_ of the filter stack exclusively.", + + "block.create.linked_extractor.tooltip": "LINKED EXTRACTOR", + "block.create.linked_extractor.tooltip.summary": "_Takes_ _items_ from an attached _Inventory_ and drops them onto the ground. Will not drop Items until the space cleared. Can be assigned an item-stack as a _filter._ Can be controlled remotely via a _Redstone_ _Link._", + "block.create.linked_extractor.tooltip.condition1": "When Redstone Link Active", + "block.create.linked_extractor.tooltip.behaviour1": "_Pauses_ the Extractor", + "block.create.linked_extractor.tooltip.control1": "R-Click on Filter Space", + "block.create.linked_extractor.tooltip.action1": "Assigns currently _held_ _stack_ as the _Filter._ Extractor will pull the item _type_ and _count_ of the filter stack exclusively.", + "block.create.linked_extractor.tooltip.control2": "R-Click on Frequency Space", + "block.create.linked_extractor.tooltip.action2": "Assigns currently _held_ _item_ as part of the Frequency listened on. Whenever a transmitting _Redstone_ _Link_ of the same frequency is powered, this Extractor will pause.", + + "block.create.belt_funnel.tooltip": "BELT FUNNEL", + "block.create.belt_funnel.tooltip.summary": "Collects incoming items on a _Mechanical_ _Belt_ and inserts them into the attached _Inventory_ if possible. Has to be directly _on_ _top_ of a Belt, with the opening facing against the Belts' movement direction. The inventory has to be on the same height as the funnel.", + + "block.create.entity_detector.tooltip": "BELT OBSERVER", + "block.create.entity_detector.tooltip.summary": "Detects items passing by on a _Mechanical_ _Belt_ in front of it. Works well with a _Piston_ on top, pushing certain items off.", + "block.create.entity_detector.tooltip.condition1": "When item matches Filter", + "block.create.entity_detector.tooltip.behaviour1": "Provides a short _Redstone_ _pulse_ to all sides. An Empty Filter matches all passing items.", + "block.create.entity_detector.tooltip.control1": "R-Click on Filter Space", + "block.create.entity_detector.tooltip.action1": "Assigns currently _held_ _stack_ as the _Filter._ Observer will react to this item type only.", + + "block.create.pulse_repeater.tooltip": "PULSE REPEATER", + "block.create.pulse_repeater.tooltip.summary": "A simple circuit for cutting passing redstone signals to a length of _1_ _tick._", + + "block.create.flexpeater.tooltip": "FLEX REPEATER", + "block.create.flexpeater.tooltip.summary": "An advanced _Redstone_ _Repeater_ with a _configurable_ _Delay_ up to 30 Minutes.", + + "itemGroup.create": "Create" +} From facef0ddb19e0fc0bf7b18fd333747e4a82dc167 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Tue, 15 Oct 2019 22:22:19 +0200 Subject: [PATCH 3/8] Bug Fixes in 0.1.1a - Fixed id downcasing not working properly in non-english environments #25 - Removed event subscriber annotations for mod & registry events - Added more displayable slots in the Washing JEI view - Fixed Windowed blocks referencing IBakedModel on the server - Changed stairs to use blockstate supplier - Fixed Symmetry Wand crashing when configured in the off-hand - Fixed "Hold Shift" in tooltips not being translated - Chassis now drop applied slime balls - Slime Balls are now craftable - Mechanical Belts now lock living entities in place - Blockzapper recipes can now be viewed from the uses of their ingredient materials - Configured FlexPeaters now synchronize with other players - Fixed client crash when rendering lava in a deployed schematic #15 - Made encased fans a little less expensive - Added other coral types to tree fertilizer recipe --- build.gradle | 10 +- .../com/simibubi/create/AllBlockTags.java | 12 +- .../java/com/simibubi/create/AllBlocks.java | 7 +- .../com/simibubi/create/AllContainers.java | 22 ++-- .../java/com/simibubi/create/AllItemTags.java | 6 +- .../java/com/simibubi/create/AllItems.java | 5 +- .../java/com/simibubi/create/AllRecipes.java | 3 +- .../com/simibubi/create/AllTileEntities.java | 17 +-- src/main/java/com/simibubi/create/Create.java | 31 +++-- .../com/simibubi/create/CreateClient.java | 19 ++- .../com/simibubi/create/ScreenResources.java | 1 + .../jei/BlockzapperUpgradeCategory.java | 2 +- .../create/compat/jei/SplashingCategory.java | 22 +++- .../foundation/block/ProperStairsBlock.java | 2 +- .../create/foundation/packet/NbtPacket.java | 18 ++- .../foundation/utility/FilesHelper.java | 8 +- .../foundation/utility/ItemDescription.java | 38 ++++-- .../create/foundation/utility/Lang.java | 5 + .../constructs/AbstractChassisBlock.java | 25 +++- .../constructs/MechanicalPistonBlock.java | 3 +- .../contraptions/relays/belt/BeltBlock.java | 5 +- .../relays/belt/BeltTileEntity.java | 9 +- .../partialWindows/WindowInABlockModel.java | 11 +- .../WindowInABlockTileEntity.java | 17 +-- .../placementHandgun/BuilderGunItem.java | 8 +- .../BuilderGunUpgradeRecipe.java | 9 +- .../placementHandgun/PlacementPatterns.java | 3 +- .../symmetry/SymmetryWandItem.java | 8 +- .../symmetry/SymmetryWandScreen.java | 14 +- .../logistics/block/EntityDetectorBlock.java | 2 +- .../logistics/block/LinkedExtractorBlock.java | 2 +- .../diodes/ConfigureFlexpeaterPacket.java | 2 + .../block/diodes/FlexpeaterTileEntity.java | 10 ++ .../modules/schematics/MaterialChecklist.java | 48 +++---- .../modules/schematics/SchematicWorld.java | 124 ++---------------- .../block/SchematicannonTileEntity.java | 2 +- .../schematics/client/SchematicHandler.java | 2 +- .../schematics/client/SchematicHologram.java | 3 +- .../schematics/client/tools/Tools.java | 4 +- .../assets/create/textures/gui/recipes3.png | Bin 15269 -> 15271 bytes .../create/recipes/crafting/encased_fan.json | 2 +- .../create/recipes/crafting/slime_ball.json | 21 +++ .../recipes/crafting/tree_fertilizer.json | 20 ++- 43 files changed, 306 insertions(+), 276 deletions(-) create mode 100644 src/main/resources/data/create/recipes/crafting/slime_ball.json diff --git a/build.gradle b/build.gradle index afa76c8a1..ca34bd323 100644 --- a/build.gradle +++ b/build.gradle @@ -13,14 +13,14 @@ apply plugin: 'net.minecraftforge.gradle' apply plugin: 'eclipse' apply plugin: 'maven-publish' -version = 'mc1.14.4_v0.1.1' +version = 'mc1.14.4_v0.1.1a' group = 'com.simibubi.create' archivesBaseName = 'create' sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = '1.8' minecraft { - mappings channel: 'snapshot', version: '20190917-1.14.3' + mappings channel: 'snapshot', version: '20191012-1.14.3' runs { client { @@ -71,12 +71,12 @@ repositories { } dependencies { - minecraft 'net.minecraftforge:forge:1.14.4-28.1.6' + minecraft 'net.minecraftforge:forge:1.14.4-28.1.45' // compile against the JEI API but do not include it at runtime - compileOnly fg.deobf("mezz.jei:jei-1.14.4:6.0.0.10:api") + compileOnly fg.deobf("mezz.jei:jei-1.14.4:6.0.0.18:api") // at runtime, use the full JEI jar - runtimeOnly fg.deobf("mezz.jei:jei-1.14.4:6.0.0.10") + //runtimeOnly fg.deobf("mezz.jei:jei-1.14.4:6.0.0.18") } jar { diff --git a/src/main/java/com/simibubi/create/AllBlockTags.java b/src/main/java/com/simibubi/create/AllBlockTags.java index 5b2925c7e..94a42df87 100644 --- a/src/main/java/com/simibubi/create/AllBlockTags.java +++ b/src/main/java/com/simibubi/create/AllBlockTags.java @@ -1,5 +1,7 @@ package com.simibubi.create; +import com.simibubi.create.foundation.utility.Lang; + import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.tags.BlockTags; @@ -8,10 +10,8 @@ import net.minecraft.util.ResourceLocation; public enum AllBlockTags { - WINDMILL_SAILS, - FAN_HEATERS, - WINDOWABLE, - + WINDMILL_SAILS, FAN_HEATERS, WINDOWABLE, + ; public Tag tag; @@ -22,9 +22,9 @@ public enum AllBlockTags { private AllBlockTags(String path) { tag = new BlockTags.Wrapper( - new ResourceLocation(Create.ID, (path.isEmpty() ? "" : path + "/") + name().toLowerCase())); + new ResourceLocation(Create.ID, (path.isEmpty() ? "" : path + "/") + Lang.asId(name()))); } - + public boolean matches(BlockState block) { return tag.contains(block.getBlock()); } diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index b5864318a..aa30de544 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -5,6 +5,7 @@ import com.simibubi.create.foundation.block.IWithoutBlockItem; import com.simibubi.create.foundation.block.ProperStairsBlock; import com.simibubi.create.foundation.block.RenderUtilityAxisBlock; import com.simibubi.create.foundation.block.RenderUtilityBlock; +import com.simibubi.create.foundation.utility.Lang; import com.simibubi.create.modules.IModule; import com.simibubi.create.modules.contraptions.generators.MotorBlock; import com.simibubi.create.modules.contraptions.generators.WaterWheelBlock; @@ -182,14 +183,14 @@ public enum AllBlocks { CategoryTracker.currentModule = new IModule() { @Override public String getModuleName() { - return name().toLowerCase().replaceAll("__", ""); + return Lang.asId(name()).replaceAll("__", ""); } }; } private AllBlocks(Block block, ComesWith... comesWith) { this.block = block; - this.block.setRegistryName(Create.ID, this.name().toLowerCase()); + this.block.setRegistryName(Create.ID, Lang.asId(name())); this.module = CategoryTracker.currentModule; alsoRegistered = new Block[comesWith.length]; @@ -259,7 +260,7 @@ public enum AllBlocks { } return featured.setRegistryName(Create.ID, - block.getRegistryName().getPath() + "_" + feature.name().toLowerCase()); + block.getRegistryName().getPath() + "_" + Lang.asId(feature.name())); } @OnlyIn(Dist.CLIENT) diff --git a/src/main/java/com/simibubi/create/AllContainers.java b/src/main/java/com/simibubi/create/AllContainers.java index fb0153905..0f6113487 100644 --- a/src/main/java/com/simibubi/create/AllContainers.java +++ b/src/main/java/com/simibubi/create/AllContainers.java @@ -1,5 +1,6 @@ package com.simibubi.create; +import com.simibubi.create.foundation.utility.Lang; import com.simibubi.create.modules.logistics.block.FlexcrateContainer; import com.simibubi.create.modules.logistics.block.FlexcrateScreen; import com.simibubi.create.modules.schematics.block.SchematicTableContainer; @@ -17,19 +18,15 @@ import net.minecraft.inventory.container.ContainerType.IFactory; import net.minecraft.util.ResourceLocation; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.event.RegistryEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod.EventBusSubscriber; -import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; import net.minecraftforge.fml.network.IContainerFactory; +import net.minecraftforge.registries.IForgeRegistry; -@EventBusSubscriber(bus = Bus.MOD) public enum AllContainers { - SCHEMATIC_TABLE(SchematicTableContainer::new), + SCHEMATIC_TABLE(SchematicTableContainer::new), SCHEMATICANNON(SchematicannonContainer::new), FLEXCRATE(FlexcrateContainer::new), - + ; public ContainerType type; @@ -39,13 +36,11 @@ public enum AllContainers { this.factory = factory; } - @SubscribeEvent - public static void onContainerTypeRegistry(final RegistryEvent.Register> e) { - + public static void registerContainers(IForgeRegistry> iForgeRegistry) { for (AllContainers container : values()) { container.type = new ContainerType<>(container.factory) - .setRegistryName(new ResourceLocation(Create.ID, container.name().toLowerCase())); - e.getRegistry().register(container.type); + .setRegistryName(new ResourceLocation(Create.ID, Lang.asId(container.name()))); + iForgeRegistry.register(container.type); } } @@ -58,7 +53,8 @@ public enum AllContainers { @OnlyIn(Dist.CLIENT) @SuppressWarnings("unchecked") - private static > void bind(AllContainers c, IScreenFactory factory) { + private static > void bind(AllContainers c, + IScreenFactory factory) { ScreenManager.registerFactory((ContainerType) c.type, factory); } diff --git a/src/main/java/com/simibubi/create/AllItemTags.java b/src/main/java/com/simibubi/create/AllItemTags.java index b8eaa1b7a..77dab7504 100644 --- a/src/main/java/com/simibubi/create/AllItemTags.java +++ b/src/main/java/com/simibubi/create/AllItemTags.java @@ -1,5 +1,7 @@ package com.simibubi.create; +import com.simibubi.create.foundation.utility.Lang; + import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.tags.ItemTags; @@ -13,11 +15,11 @@ public enum AllItemTags { public Tag tag; private AllItemTags(String path) { - tag = new ItemTags.Wrapper(new ResourceLocation(Create.ID, path + "/" + name().toLowerCase())); + tag = new ItemTags.Wrapper(new ResourceLocation(Create.ID, path + "/" + Lang.asId(name()))); } public boolean matches(ItemStack item) { return tag.contains(item.getItem()); } - + } diff --git a/src/main/java/com/simibubi/create/AllItems.java b/src/main/java/com/simibubi/create/AllItems.java index 57502af0a..8b3bee9e3 100644 --- a/src/main/java/com/simibubi/create/AllItems.java +++ b/src/main/java/com/simibubi/create/AllItems.java @@ -1,6 +1,7 @@ package com.simibubi.create; import com.simibubi.create.foundation.item.IItemWithColorHandler; +import com.simibubi.create.foundation.utility.Lang; import com.simibubi.create.modules.IModule; import com.simibubi.create.modules.contraptions.relays.VerticalGearboxItem; import com.simibubi.create.modules.contraptions.relays.belt.BeltItem; @@ -91,14 +92,14 @@ public enum AllItems { CategoryTracker.currentModule = new IModule() { @Override public String getModuleName() { - return name().toLowerCase().replaceAll("__", ""); + return Lang.asId(name()).replaceAll("__", ""); } }; } private AllItems(Item item) { this.item = item; - this.item.setRegistryName(Create.ID, this.name().toLowerCase()); + this.item.setRegistryName(Create.ID, Lang.asId(name())); this.module = CategoryTracker.currentModule; } diff --git a/src/main/java/com/simibubi/create/AllRecipes.java b/src/main/java/com/simibubi/create/AllRecipes.java index 6757954aa..659f6321f 100644 --- a/src/main/java/com/simibubi/create/AllRecipes.java +++ b/src/main/java/com/simibubi/create/AllRecipes.java @@ -2,6 +2,7 @@ package com.simibubi.create; import java.util.function.Supplier; +import com.simibubi.create.foundation.utility.Lang; import com.simibubi.create.modules.contraptions.base.ProcessingRecipeSerializer; import com.simibubi.create.modules.contraptions.receivers.CrushingRecipe; import com.simibubi.create.modules.contraptions.receivers.PressingRecipe; @@ -52,7 +53,7 @@ public enum AllRecipes { public static void register(RegistryEvent.Register> event) { for (AllRecipes r : AllRecipes.values()) { r.serializer = r.supplier.get(); - ResourceLocation location = new ResourceLocation(Create.ID, r.name().toLowerCase()); + ResourceLocation location = new ResourceLocation(Create.ID, Lang.asId(r.name())); event.getRegistry().register(r.serializer.setRegistryName(location)); } } diff --git a/src/main/java/com/simibubi/create/AllTileEntities.java b/src/main/java/com/simibubi/create/AllTileEntities.java index 966e1955e..5beacae39 100644 --- a/src/main/java/com/simibubi/create/AllTileEntities.java +++ b/src/main/java/com/simibubi/create/AllTileEntities.java @@ -2,6 +2,7 @@ package com.simibubi.create; import java.util.function.Supplier; +import com.simibubi.create.foundation.utility.Lang; import com.simibubi.create.modules.contraptions.base.KineticTileEntityRenderer; import com.simibubi.create.modules.contraptions.generators.MotorTileEntity; import com.simibubi.create.modules.contraptions.generators.MotorTileEntityRenderer; @@ -54,13 +55,9 @@ import net.minecraft.tileentity.TileEntityType; import net.minecraft.util.ResourceLocation; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.event.RegistryEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.client.registry.ClientRegistry; -import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; +import net.minecraftforge.registries.IForgeRegistry; -@Mod.EventBusSubscriber(bus = Bus.MOD) public enum AllTileEntities { // Schematics @@ -95,7 +92,7 @@ public enum AllTileEntities { BELT_FUNNEL(BeltFunnelTileEntity::new, AllBlocks.BELT_FUNNEL), ENTITY_DETECTOR(EntityDetectorTileEntity::new, AllBlocks.ENTITY_DETECTOR), FLEXPEATER(FlexpeaterTileEntity::new, AllBlocks.FLEXPEATER), - + // Curiosities WINDOW_IN_A_BLOCK(WindowInABlockTileEntity::new, AllBlocks.WINDOW_IN_A_BLOCK), @@ -110,18 +107,16 @@ public enum AllTileEntities { this.blocks = blocks; } - @SubscribeEvent - public static void onTileEntityRegistry(final RegistryEvent.Register> event) { - + public static void registerTileEntities(IForgeRegistry> registry) { for (AllTileEntities tileEntity : values()) { Block[] blocks = new Block[tileEntity.blocks.length]; for (int i = 0; i < blocks.length; i++) blocks[i] = tileEntity.blocks[i].block; - ResourceLocation resourceLocation = new ResourceLocation(Create.ID, tileEntity.name().toLowerCase()); + ResourceLocation resourceLocation = new ResourceLocation(Create.ID, Lang.asId(tileEntity.name())); tileEntity.type = TileEntityType.Builder.create(tileEntity.supplier, blocks).build(null) .setRegistryName(resourceLocation); - event.getRegistry().register(tileEntity.type); + registry.register(tileEntity.type); } } diff --git a/src/main/java/com/simibubi/create/Create.java b/src/main/java/com/simibubi/create/Create.java index 6fdf530b7..6ad1204b6 100644 --- a/src/main/java/com/simibubi/create/Create.java +++ b/src/main/java/com/simibubi/create/Create.java @@ -9,20 +9,20 @@ import com.simibubi.create.modules.logistics.FrequencyHandler; import com.simibubi.create.modules.schematics.ServerSchematicLoader; import net.minecraft.block.Block; +import net.minecraft.inventory.container.ContainerType; import net.minecraft.item.Item; import net.minecraft.item.ItemGroup; import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraft.tileentity.TileEntityType; import net.minecraftforge.common.crafting.CraftingHelper; import net.minecraftforge.event.RegistryEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.fml.ModLoadingContext; import net.minecraftforge.fml.common.Mod; -import net.minecraftforge.fml.common.Mod.EventBusSubscriber; -import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; import net.minecraftforge.fml.config.ModConfig; import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; +import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; -@EventBusSubscriber(bus = Bus.MOD) @Mod(Create.ID) public class Create { @@ -39,11 +39,20 @@ public class Create { public static ModConfig config; public Create() { + IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus(); + modEventBus.addListener(Create::init); + modEventBus.addGenericListener(Block.class, Create::registerBlocks); + modEventBus.addGenericListener(Item.class, Create::registerItems); + modEventBus.addGenericListener(IRecipeSerializer.class, Create::registerRecipes); + modEventBus.addGenericListener(TileEntityType.class, Create::registerTileEntities); + modEventBus.addGenericListener(ContainerType.class, Create::registerContainers); + modEventBus.addListener(Create::createConfigs); + CreateClient.addListeners(modEventBus); + ModLoadingContext.get().registerConfig(ModConfig.Type.SERVER, CreateConfig.specification); ModLoadingContext.get().registerConfig(ModConfig.Type.CLIENT, CreateClientConfig.specification); } - @SubscribeEvent public static void init(final FMLCommonSetupEvent event) { schematicReceiver = new ServerSchematicLoader(); frequencyHandler = new FrequencyHandler(); @@ -52,23 +61,27 @@ public class Create { AllPackets.registerPackets(); } - @SubscribeEvent public static void registerItems(RegistryEvent.Register event) { AllItems.registerItems(event.getRegistry()); AllBlocks.registerItemBlocks(event.getRegistry()); } - @SubscribeEvent public static void registerBlocks(RegistryEvent.Register event) { AllBlocks.registerBlocks(event.getRegistry()); } - @SubscribeEvent + public static void registerTileEntities(RegistryEvent.Register> event) { + AllTileEntities.registerTileEntities(event.getRegistry()); + } + + public static void registerContainers(RegistryEvent.Register> event) { + AllContainers.registerContainers(event.getRegistry()); + } + public static void registerRecipes(RegistryEvent.Register> event) { AllRecipes.register(event); } - @SubscribeEvent public static void createConfigs(ModConfig.ModConfigEvent event) { if (event.getConfig().getSpec() == CreateClientConfig.specification) return; diff --git a/src/main/java/com/simibubi/create/CreateClient.java b/src/main/java/com/simibubi/create/CreateClient.java index 1b1323e44..13f29c9b6 100644 --- a/src/main/java/com/simibubi/create/CreateClient.java +++ b/src/main/java/com/simibubi/create/CreateClient.java @@ -24,13 +24,11 @@ import net.minecraft.util.ResourceLocation; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.client.event.ModelBakeEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.common.Mod.EventBusSubscriber; -import net.minecraftforge.fml.common.Mod.EventBusSubscriber.Bus; +import net.minecraftforge.eventbus.api.IEventBus; +import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.fml.config.ModConfig; import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent; -@EventBusSubscriber(bus = Bus.MOD) public class CreateClient { public static ClientSchematicLoader schematicSender; @@ -41,7 +39,14 @@ public class CreateClient { public static ModConfig config; - @SubscribeEvent + public static void addListeners(IEventBus modEventBus) { + DistExecutor.runWhenOn(Dist.CLIENT, () -> () -> { + modEventBus.addListener(CreateClient::clientInit); + modEventBus.addListener(CreateClient::createConfigs); + modEventBus.addListener(CreateClient::onModelBake); + }); + } + public static void clientInit(FMLClientSetupEvent event) { schematicSender = new ClientSchematicLoader(); schematicHandler = new SchematicHandler(); @@ -60,7 +65,6 @@ public class CreateClient { ((IReloadableResourceManager) resourceManager).addReloadListener(new CachedBufferReloader()); } - @SubscribeEvent public static void createConfigs(ModConfig.ModConfigEvent event) { if (event.getConfig().getSpec() == CreateConfig.specification) return; @@ -75,7 +79,6 @@ public class CreateClient { schematicHologram.tick(); } - @SubscribeEvent @OnlyIn(Dist.CLIENT) public static void onModelBake(ModelBakeEvent event) { Map modelRegistry = event.getModelRegistry(); @@ -111,4 +114,6 @@ public class CreateClient { modelRegistry.put(location, factory.apply(modelRegistry.get(location))); } + + } diff --git a/src/main/java/com/simibubi/create/ScreenResources.java b/src/main/java/com/simibubi/create/ScreenResources.java index ede2380d6..6c4ba4e7b 100644 --- a/src/main/java/com/simibubi/create/ScreenResources.java +++ b/src/main/java/com/simibubi/create/ScreenResources.java @@ -38,6 +38,7 @@ public enum ScreenResources { BLOCKZAPPER_UPGRADE_RECIPE("recipes2.png", 144, 66), PRESSER_RECIPE("recipes2.png", 0, 108, 177, 109), WASHING_RECIPE("recipes3.png", 177, 109), + PROCESSING_RECIPE_SLOT("recipes3.png", 177, 0, 20, 20), // Widgets PALETTE_BUTTON("palette_picker.png", 0, 236, 20, 20), diff --git a/src/main/java/com/simibubi/create/compat/jei/BlockzapperUpgradeCategory.java b/src/main/java/com/simibubi/create/compat/jei/BlockzapperUpgradeCategory.java index a0516c980..50ab29658 100644 --- a/src/main/java/com/simibubi/create/compat/jei/BlockzapperUpgradeCategory.java +++ b/src/main/java/com/simibubi/create/compat/jei/BlockzapperUpgradeCategory.java @@ -109,7 +109,7 @@ public class BlockzapperUpgradeCategory implements IRecipeCategory private static ResourceLocation ID = new ResourceLocation(Create.ID, "splashing"); private IDrawable icon; + private IDrawable slot; public SplashingCategory() { + slot = new ScreenResourceWrapper(ScreenResources.PROCESSING_RECIPE_SLOT); icon = new DoubleItemIcon(() -> new ItemStack(AllItems.PROPELLER.get()), () -> new ItemStack(Items.WATER_BUCKET)); } - + @Override public IDrawable getIcon() { return icon; @@ -54,7 +56,7 @@ public class SplashingCategory extends ProcessingViaFanCategory public String getTitle() { return Lang.translate("recipe.splashing"); } - + @Override public void setIngredients(SplashingRecipe recipe, IIngredients ingredients) { ingredients.setInputIngredients(recipe.getIngredients()); @@ -69,7 +71,10 @@ public class SplashingCategory extends ProcessingViaFanCategory List results = recipe.getRollableResults(); for (int outputIndex = 0; outputIndex < results.size(); outputIndex++) { - itemStacks.init(outputIndex + 1, false, 139, 58 + 19 * outputIndex); + int xOffset = outputIndex % 2 == 0 ? 0 : 19; + int yOffset = (outputIndex / 2) * -19; + + itemStacks.init(outputIndex + 1, false, 132 + xOffset, 77 + yOffset); itemStacks.set(outputIndex + 1, results.get(outputIndex).getStack()); } @@ -88,6 +93,17 @@ public class SplashingCategory extends ProcessingViaFanCategory return new ScreenResourceWrapper(ScreenResources.WASHING_RECIPE); } + @Override + public void draw(SplashingRecipe recipe, double mouseX, double mouseY) { + super.draw(recipe, mouseX, mouseY); + int size = recipe.getPossibleOutputs().size(); + for (int i = 4; i < size; i++) { + int xOffset = i % 2 == 0 ? 0 : 19; + int yOffset = (i / 2) * -19; + slot.draw(131 + xOffset, 76 + yOffset); + } + } + @Override public void renderAttachedBlock() { BlockState state = Blocks.WATER.getDefaultState().with(FlowingFluidBlock.LEVEL, 8); diff --git a/src/main/java/com/simibubi/create/foundation/block/ProperStairsBlock.java b/src/main/java/com/simibubi/create/foundation/block/ProperStairsBlock.java index 5efbf5045..35892d1fd 100644 --- a/src/main/java/com/simibubi/create/foundation/block/ProperStairsBlock.java +++ b/src/main/java/com/simibubi/create/foundation/block/ProperStairsBlock.java @@ -6,7 +6,7 @@ import net.minecraft.block.StairsBlock; public class ProperStairsBlock extends StairsBlock { public ProperStairsBlock(Block block) { - super(block.getDefaultState(), Properties.from(block)); + super(() -> block.getDefaultState(), Properties.from(block)); } } diff --git a/src/main/java/com/simibubi/create/foundation/packet/NbtPacket.java b/src/main/java/com/simibubi/create/foundation/packet/NbtPacket.java index 26875bc49..490326f10 100644 --- a/src/main/java/com/simibubi/create/foundation/packet/NbtPacket.java +++ b/src/main/java/com/simibubi/create/foundation/packet/NbtPacket.java @@ -5,30 +5,36 @@ import java.util.function.Supplier; import net.minecraft.entity.player.ServerPlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.network.PacketBuffer; +import net.minecraft.util.Hand; import net.minecraftforge.fml.network.NetworkEvent.Context; public class NbtPacket extends SimplePacketBase { public ItemStack stack; public int slot; + public Hand hand; - public NbtPacket(ItemStack stack) { + public NbtPacket(ItemStack stack, Hand hand) { this(stack, -1); + this.hand = hand; } public NbtPacket(ItemStack stack, int slot) { this.stack = stack; this.slot = slot; + this.hand = Hand.MAIN_HAND; } public NbtPacket(PacketBuffer buffer) { stack = buffer.readItemStack(); slot = buffer.readInt(); + hand = Hand.values()[buffer.readInt()]; } public void write(PacketBuffer buffer) { buffer.writeItemStack(stack); buffer.writeInt(slot); + buffer.writeInt(hand.ordinal()); } public void handle(Supplier context) { @@ -36,15 +42,7 @@ public class NbtPacket extends SimplePacketBase { ServerPlayerEntity player = context.get().getSender(); if (slot == -1) { - ItemStack heldItem = player.getHeldItemMainhand(); - if (heldItem.getItem() == stack.getItem()) { - heldItem.setTag(stack.getTag()); - } - return; - } - - if (slot == -2) { - ItemStack heldItem = player.getHeldItemOffhand(); + ItemStack heldItem = player.getHeldItem(hand); if (heldItem.getItem() == stack.getItem()) { heldItem.setTag(stack.getTag()); } diff --git a/src/main/java/com/simibubi/create/foundation/utility/FilesHelper.java b/src/main/java/com/simibubi/create/foundation/utility/FilesHelper.java index 2ab097e60..6e41a84e5 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/FilesHelper.java +++ b/src/main/java/com/simibubi/create/foundation/utility/FilesHelper.java @@ -26,7 +26,7 @@ public class FilesHelper { Path path = Paths.get(name); if (path.getParent() != null) createFolderIfMissing(path.getParent().toString()); - + if (!Files.isDirectory(path)) { try { Files.createDirectory(path); @@ -49,7 +49,7 @@ public class FilesHelper { } public static String slug(String name) { - return name.toLowerCase().replace(' ', '_').replace('!', '_').replace('?', '_'); + return Lang.asId(name).replace(' ', '_').replace('!', '_').replace('?', '_'); } public static boolean saveTagCompoundAsJson(CompoundNBT compound, String path) { @@ -65,7 +65,6 @@ public class FilesHelper { } return false; } - public static boolean saveTagCompoundAsJsonCompact(CompoundNBT compound, String path) { try { @@ -78,7 +77,7 @@ public class FilesHelper { e.printStackTrace(); } return false; - + } public static CompoundNBT loadJsonNBT(InputStream inputStream) { @@ -110,5 +109,4 @@ public class FilesHelper { return null; } - } diff --git a/src/main/java/com/simibubi/create/foundation/utility/ItemDescription.java b/src/main/java/com/simibubi/create/foundation/utility/ItemDescription.java index 83002860f..99145c52b 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/ItemDescription.java +++ b/src/main/java/com/simibubi/create/foundation/utility/ItemDescription.java @@ -85,19 +85,41 @@ public class ItemDescription { boolean hasControls = !linesOnCtrl.isEmpty(); if (hasDescription || hasControls) { + String[] holdKey = Lang.translate("tooltip.holdKey", "$").split("\\$"); + String[] holdKeyOrKey = Lang.translate("tooltip.holdKeyOrKey", "$", "$").split("\\$"); + String keyShift = Lang.translate("tooltip.keyShift"); + String keyCtrl = Lang.translate("tooltip.keyCtrl"); for (List list : Arrays.asList(lines, linesOnShift, linesOnCtrl)) { boolean shift = list == linesOnShift; boolean ctrl = list == linesOnCtrl; - String tabs = DARK_GRAY + "Hold "; - if (hasDescription) - tabs += "<" + (shift ? palette.hColor : palette.color) + "Shift" + DARK_GRAY + ">"; - if (hasDescription && hasControls) - tabs += " or "; - if (hasControls) - tabs += "<" + (ctrl ? palette.hColor : palette.color) + "Control" + DARK_GRAY + ">"; + if (holdKey.length != 2 || holdKeyOrKey.length != 3) { + list.add(0, new StringTextComponent("Invalid lang formatting!")); + continue; + } - list.add(0, new StringTextComponent(tabs)); + StringBuilder tabBuilder = new StringBuilder(); + tabBuilder.append(DARK_GRAY); + if (hasDescription && hasControls) { + tabBuilder.append(holdKeyOrKey[0]); + tabBuilder.append(shift ? palette.hColor : palette.color); + tabBuilder.append(keyShift); + tabBuilder.append(DARK_GRAY); + tabBuilder.append(holdKeyOrKey[1]); + tabBuilder.append(ctrl ? palette.hColor : palette.color); + tabBuilder.append(keyCtrl); + tabBuilder.append(DARK_GRAY); + tabBuilder.append(holdKeyOrKey[2]); + + } else { + tabBuilder.append(holdKey[0]); + tabBuilder.append((hasDescription ? shift : ctrl) ? palette.hColor : palette.color); + tabBuilder.append(hasDescription ? keyShift : keyCtrl); + tabBuilder.append(DARK_GRAY); + tabBuilder.append(holdKey[1]); + } + + list.add(0, new StringTextComponent(tabBuilder.toString())); if (shift || ctrl) list.add(1, new StringTextComponent("")); } diff --git a/src/main/java/com/simibubi/create/foundation/utility/Lang.java b/src/main/java/com/simibubi/create/foundation/utility/Lang.java index a095dafb7..a763c5ced 100644 --- a/src/main/java/com/simibubi/create/foundation/utility/Lang.java +++ b/src/main/java/com/simibubi/create/foundation/utility/Lang.java @@ -2,6 +2,7 @@ package com.simibubi.create.foundation.utility; import java.util.ArrayList; import java.util.List; +import java.util.Locale; import com.simibubi.create.Create; @@ -30,4 +31,8 @@ public class Lang { return result; } + public static String asId(String name) { + return name.toLowerCase(Locale.ENGLISH); + } + } diff --git a/src/main/java/com/simibubi/create/modules/contraptions/receivers/constructs/AbstractChassisBlock.java b/src/main/java/com/simibubi/create/modules/contraptions/receivers/constructs/AbstractChassisBlock.java index fb5fa52c6..2482b51e1 100644 --- a/src/main/java/com/simibubi/create/modules/contraptions/receivers/constructs/AbstractChassisBlock.java +++ b/src/main/java/com/simibubi/create/modules/contraptions/receivers/constructs/AbstractChassisBlock.java @@ -4,25 +4,30 @@ import com.simibubi.create.foundation.block.IBlockWithScrollableValue; import com.simibubi.create.foundation.block.IWithTileEntity; import com.simibubi.create.foundation.utility.Lang; +import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.RotatedPillarBlock; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; +import net.minecraft.particles.ParticleTypes; import net.minecraft.state.BooleanProperty; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Direction; import net.minecraft.util.Hand; +import net.minecraft.util.SoundCategory; +import net.minecraft.util.SoundEvents; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.util.math.Vec3d; import net.minecraft.world.IBlockReader; import net.minecraft.world.IWorld; import net.minecraft.world.World; +import net.minecraftforge.common.Tags; public abstract class AbstractChassisBlock extends RotatedPillarBlock implements IWithTileEntity, IBlockWithScrollableValue { - + private static final Vec3d valuePos = new Vec3d(15 / 16f, 9 / 16f, 9 / 16f); public AbstractChassisBlock(Properties properties) { @@ -50,16 +55,24 @@ public abstract class AbstractChassisBlock extends RotatedPillarBlock return false; ItemStack heldItem = player.getHeldItem(handIn); - boolean isSlimeBall = heldItem.isItemEqual(new ItemStack(Items.SLIME_BALL)); + boolean isSlimeBall = heldItem.getItem().isIn(Tags.Items.SLIMEBALLS); + if ((!heldItem.isEmpty() || !player.isSneaking()) && !isSlimeBall) return false; if (state.get(affectedSide) == isSlimeBall) return false; - if (worldIn.isRemote) + if (worldIn.isRemote) { + Vec3d vec = hit.getHitVec(); + worldIn.addParticle(ParticleTypes.ITEM_SLIME, vec.x, vec.y, vec.z, 0, 0, 0); return true; + } + worldIn.playSound(null, pos, SoundEvents.BLOCK_SLIME_BLOCK_PLACE, SoundCategory.BLOCKS, .5f, 1); if (isSlimeBall && !player.isCreative()) heldItem.shrink(1); + if (!isSlimeBall && !player.isCreative()) + Block.spawnAsEntity(worldIn, pos.offset(hit.getFace()), new ItemStack(Items.SLIME_BALL)); + worldIn.setBlockState(pos, state.with(affectedSide, isSlimeBall)); return true; } @@ -78,17 +91,17 @@ public abstract class AbstractChassisBlock extends RotatedPillarBlock public String getValueName(BlockState state, IWorld world, BlockPos pos) { return Lang.translate("generic.range"); } - + @Override public Vec3d getValueBoxPosition(BlockState state, IWorld world, BlockPos pos) { return valuePos; } - + @Override public Direction getValueBoxDirection(BlockState state, IWorld world, BlockPos pos) { return null; } - + @Override public boolean isValueOnAllSides() { return true; diff --git a/src/main/java/com/simibubi/create/modules/contraptions/receivers/constructs/MechanicalPistonBlock.java b/src/main/java/com/simibubi/create/modules/contraptions/receivers/constructs/MechanicalPistonBlock.java index 32fc8531d..e61db1126 100644 --- a/src/main/java/com/simibubi/create/modules/contraptions/receivers/constructs/MechanicalPistonBlock.java +++ b/src/main/java/com/simibubi/create/modules/contraptions/receivers/constructs/MechanicalPistonBlock.java @@ -2,6 +2,7 @@ package com.simibubi.create.modules.contraptions.receivers.constructs; import com.simibubi.create.AllBlocks; import com.simibubi.create.CreateConfig; +import com.simibubi.create.foundation.utility.Lang; import com.simibubi.create.modules.contraptions.base.IRotate; import com.simibubi.create.modules.contraptions.base.KineticBlock; @@ -145,7 +146,7 @@ public class MechanicalPistonBlock extends KineticBlock { @Override public String getName() { - return name().toLowerCase(); + return Lang.asId(name()); } } diff --git a/src/main/java/com/simibubi/create/modules/contraptions/relays/belt/BeltBlock.java b/src/main/java/com/simibubi/create/modules/contraptions/relays/belt/BeltBlock.java index 905be6235..799ab5847 100644 --- a/src/main/java/com/simibubi/create/modules/contraptions/relays/belt/BeltBlock.java +++ b/src/main/java/com/simibubi/create/modules/contraptions/relays/belt/BeltBlock.java @@ -7,6 +7,7 @@ import com.simibubi.create.AllBlocks; import com.simibubi.create.AllItems; import com.simibubi.create.foundation.block.IWithTileEntity; import com.simibubi.create.foundation.block.IWithoutBlockItem; +import com.simibubi.create.foundation.utility.Lang; import com.simibubi.create.modules.contraptions.base.HorizontalKineticBlock; import com.simibubi.create.modules.contraptions.relays.belt.BeltTileEntity.TransportedEntityInfo; @@ -325,7 +326,7 @@ public class BeltBlock extends HorizontalKineticBlock implements IWithoutBlockIt @Override public String getName() { - return name().toLowerCase(); + return Lang.asId(name()); } } @@ -334,7 +335,7 @@ public class BeltBlock extends HorizontalKineticBlock implements IWithoutBlockIt @Override public String getName() { - return name().toLowerCase(); + return Lang.asId(name()); } } diff --git a/src/main/java/com/simibubi/create/modules/contraptions/relays/belt/BeltTileEntity.java b/src/main/java/com/simibubi/create/modules/contraptions/relays/belt/BeltTileEntity.java index 3c172886e..93bf50e8e 100644 --- a/src/main/java/com/simibubi/create/modules/contraptions/relays/belt/BeltTileEntity.java +++ b/src/main/java/com/simibubi/create/modules/contraptions/relays/belt/BeltTileEntity.java @@ -23,6 +23,8 @@ import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.DyeColor; import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.NBTUtil; +import net.minecraft.potion.EffectInstance; +import net.minecraft.potion.Effects; import net.minecraft.state.properties.BlockStateProperties; import net.minecraft.tileentity.ITickableTileEntity; import net.minecraft.tileentity.TileEntity; @@ -196,9 +198,10 @@ public class BeltTileEntity extends KineticTileEntity implements ITickableTileEn if (entityIn.posY - .25f < pos.getY()) return; - // Not sure if this does anything - if (entityIn instanceof LivingEntity) - ((LivingEntity) entityIn).setIdleTime(101); + // Lock entities in place + if (entityIn instanceof LivingEntity && !(entityIn instanceof PlayerEntity)) { + ((LivingEntity) entityIn).addPotionEffect(new EffectInstance(Effects.SLOWNESS, 1, 9, false, false)); + } BeltTileEntity belt = (BeltTileEntity) te; diff --git a/src/main/java/com/simibubi/create/modules/curiosities/partialWindows/WindowInABlockModel.java b/src/main/java/com/simibubi/create/modules/curiosities/partialWindows/WindowInABlockModel.java index 1a7203c27..7819c1b1b 100644 --- a/src/main/java/com/simibubi/create/modules/curiosities/partialWindows/WindowInABlockModel.java +++ b/src/main/java/com/simibubi/create/modules/curiosities/partialWindows/WindowInABlockModel.java @@ -1,5 +1,9 @@ package com.simibubi.create.modules.curiosities.partialWindows; +import static com.simibubi.create.modules.curiosities.partialWindows.WindowInABlockTileEntity.PARTIAL_BLOCK; +import static com.simibubi.create.modules.curiosities.partialWindows.WindowInABlockTileEntity.POSITION; +import static com.simibubi.create.modules.curiosities.partialWindows.WindowInABlockTileEntity.WINDOW_BLOCK; + import java.util.ArrayList; import java.util.List; import java.util.Random; @@ -23,14 +27,9 @@ import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Vec3i; import net.minecraftforge.client.MinecraftForgeClient; import net.minecraftforge.client.model.data.IModelData; -import net.minecraftforge.client.model.data.ModelProperty; public class WindowInABlockModel extends WrappedBakedModel { - public static final ModelProperty PARTIAL_BLOCK = new ModelProperty<>(); - public static final ModelProperty WINDOW_BLOCK = new ModelProperty<>(); - public static final ModelProperty POSITION = new ModelProperty<>(); - public WindowInABlockModel(IBakedModel template) { super(template); } @@ -46,7 +45,7 @@ public class WindowInABlockModel extends WrappedBakedModel { if (partialState == null || windowState == null) return dispatcher.getModelForState(Blocks.DIRT.getDefaultState()).getQuads(state, side, rand, data); - + BlockRenderLayer renderLayer = MinecraftForgeClient.getRenderLayer(); if (partialState.canRenderInLayer(renderLayer) && partialState != null) { quads.addAll(dispatcher.getModelForState(partialState).getQuads(partialState, side, rand, data)); diff --git a/src/main/java/com/simibubi/create/modules/curiosities/partialWindows/WindowInABlockTileEntity.java b/src/main/java/com/simibubi/create/modules/curiosities/partialWindows/WindowInABlockTileEntity.java index 0a5ca65bf..918286a9e 100644 --- a/src/main/java/com/simibubi/create/modules/curiosities/partialWindows/WindowInABlockTileEntity.java +++ b/src/main/java/com/simibubi/create/modules/curiosities/partialWindows/WindowInABlockTileEntity.java @@ -1,8 +1,5 @@ package com.simibubi.create.modules.curiosities.partialWindows; -import static com.simibubi.create.modules.curiosities.partialWindows.WindowInABlockModel.PARTIAL_BLOCK; -import static com.simibubi.create.modules.curiosities.partialWindows.WindowInABlockModel.WINDOW_BLOCK; - import com.simibubi.create.AllTileEntities; import com.simibubi.create.foundation.block.SyncedTileEntity; @@ -14,18 +11,22 @@ import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraftforge.client.model.data.IModelData; import net.minecraftforge.client.model.data.ModelDataMap; +import net.minecraftforge.client.model.data.ModelProperty; public class WindowInABlockTileEntity extends SyncedTileEntity { private BlockState partialBlock = Blocks.AIR.getDefaultState(); private BlockState windowBlock = Blocks.AIR.getDefaultState(); + private IModelData modelData; + public static final ModelProperty PARTIAL_BLOCK = new ModelProperty<>(); + public static final ModelProperty WINDOW_BLOCK = new ModelProperty<>(); + public static final ModelProperty POSITION = new ModelProperty<>(); public WindowInABlockTileEntity() { super(AllTileEntities.WINDOW_IN_A_BLOCK.type); modelData = new ModelDataMap.Builder().withInitial(WINDOW_BLOCK, Blocks.AIR.getDefaultState()) - .withInitial(PARTIAL_BLOCK, Blocks.AIR.getDefaultState()) - .withInitial(WindowInABlockModel.POSITION, BlockPos.ZERO).build(); + .withInitial(PARTIAL_BLOCK, Blocks.AIR.getDefaultState()).withInitial(POSITION, BlockPos.ZERO).build(); } @Override @@ -59,9 +60,9 @@ public class WindowInABlockTileEntity extends SyncedTileEntity { @Override public IModelData getModelData() { - modelData.setData(WindowInABlockModel.PARTIAL_BLOCK, partialBlock); - modelData.setData(WindowInABlockModel.WINDOW_BLOCK, windowBlock); - modelData.setData(WindowInABlockModel.POSITION, pos); + modelData.setData(PARTIAL_BLOCK, partialBlock); + modelData.setData(WINDOW_BLOCK, windowBlock); + modelData.setData(POSITION, pos); return modelData; } diff --git a/src/main/java/com/simibubi/create/modules/curiosities/placementHandgun/BuilderGunItem.java b/src/main/java/com/simibubi/create/modules/curiosities/placementHandgun/BuilderGunItem.java index 5ce44020e..78469dcfa 100644 --- a/src/main/java/com/simibubi/create/modules/curiosities/placementHandgun/BuilderGunItem.java +++ b/src/main/java/com/simibubi/create/modules/curiosities/placementHandgun/BuilderGunItem.java @@ -66,9 +66,7 @@ import net.minecraftforge.fml.network.PacketDistributor; public class BuilderGunItem extends Item { public static enum ComponentTier { - None(TextFormatting.DARK_GRAY), - BlazeBrass(TextFormatting.GOLD), - ChorusChrome(TextFormatting.LIGHT_PURPLE), + None(TextFormatting.DARK_GRAY), BlazeBrass(TextFormatting.GOLD), ChorusChrome(TextFormatting.LIGHT_PURPLE), ; @@ -108,9 +106,9 @@ public class BuilderGunItem extends Item { for (Components c : Components.values()) { ComponentTier tier = getTier(c, stack); ItemDescription.add(tooltip, - "> " + TextFormatting.GRAY + Lang.translate("blockzapper.component." + c.name().toLowerCase()) + "> " + TextFormatting.GRAY + Lang.translate("blockzapper.component." + Lang.asId(c.name())) + ": " + tier.color - + Lang.translate("blockzapper.componentTier." + tier.name().toLowerCase())); + + Lang.translate("blockzapper.componentTier." + Lang.asId(tier.name()))); } } } diff --git a/src/main/java/com/simibubi/create/modules/curiosities/placementHandgun/BuilderGunUpgradeRecipe.java b/src/main/java/com/simibubi/create/modules/curiosities/placementHandgun/BuilderGunUpgradeRecipe.java index bef5ef878..a4df1bd67 100644 --- a/src/main/java/com/simibubi/create/modules/curiosities/placementHandgun/BuilderGunUpgradeRecipe.java +++ b/src/main/java/com/simibubi/create/modules/curiosities/placementHandgun/BuilderGunUpgradeRecipe.java @@ -10,9 +10,11 @@ import net.minecraft.inventory.CraftingInventory; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.ICraftingRecipe; import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraft.item.crafting.Ingredient; import net.minecraft.item.crafting.ShapedRecipe; import net.minecraft.network.PacketBuffer; import net.minecraft.util.JSONUtils; +import net.minecraft.util.NonNullList; import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; import net.minecraftforge.registries.ForgeRegistryEntry; @@ -33,7 +35,12 @@ public class BuilderGunUpgradeRecipe implements ICraftingRecipe { public boolean matches(CraftingInventory inv, World worldIn) { return getRecipe().matches(inv, worldIn); } - + + @Override + public NonNullList getIngredients() { + return recipe.getIngredients(); + } + @Override public ItemStack getCraftingResult(CraftingInventory inv) { for (int slot = 0; slot < inv.getSizeInventory(); slot++) { diff --git a/src/main/java/com/simibubi/create/modules/curiosities/placementHandgun/PlacementPatterns.java b/src/main/java/com/simibubi/create/modules/curiosities/placementHandgun/PlacementPatterns.java index 639bb7ed3..2cdf9678d 100644 --- a/src/main/java/com/simibubi/create/modules/curiosities/placementHandgun/PlacementPatterns.java +++ b/src/main/java/com/simibubi/create/modules/curiosities/placementHandgun/PlacementPatterns.java @@ -1,6 +1,7 @@ package com.simibubi.create.modules.curiosities.placementHandgun; import com.simibubi.create.ScreenResources; +import com.simibubi.create.foundation.utility.Lang; public enum PlacementPatterns { @@ -15,7 +16,7 @@ public enum PlacementPatterns { public ScreenResources icon; private PlacementPatterns(ScreenResources icon) { - this.translationKey = name().toLowerCase(); + this.translationKey = Lang.asId(name()); this.icon = icon; } diff --git a/src/main/java/com/simibubi/create/modules/curiosities/symmetry/SymmetryWandItem.java b/src/main/java/com/simibubi/create/modules/curiosities/symmetry/SymmetryWandItem.java index 299a43217..ecfa4382a 100644 --- a/src/main/java/com/simibubi/create/modules/curiosities/symmetry/SymmetryWandItem.java +++ b/src/main/java/com/simibubi/create/modules/curiosities/symmetry/SymmetryWandItem.java @@ -60,7 +60,7 @@ public class SymmetryWandItem extends Item { if (player.isSneaking()) { if (player.world.isRemote) { DistExecutor.runWhenOn(Dist.CLIENT, () -> () -> { - openWandGUI(wand); + openWandGUI(wand, context.getHand()); }); player.getCooldownTracker().setCooldown(this, 5); } @@ -123,7 +123,7 @@ public class SymmetryWandItem extends Item { if (playerIn.isSneaking()) { if (worldIn.isRemote) { DistExecutor.runWhenOn(Dist.CLIENT, () -> () -> { - openWandGUI(playerIn.getHeldItem(handIn)); + openWandGUI(playerIn.getHeldItem(handIn), handIn); }); playerIn.getCooldownTracker().setCooldown(this, 5); } @@ -136,8 +136,8 @@ public class SymmetryWandItem extends Item { } @OnlyIn(Dist.CLIENT) - private void openWandGUI(ItemStack wand) { - ScreenOpener.open(new SymmetryWandScreen(wand)); + private void openWandGUI(ItemStack wand, Hand hand) { + ScreenOpener.open(new SymmetryWandScreen(wand, hand)); } private static void checkNBT(ItemStack wand) { diff --git a/src/main/java/com/simibubi/create/modules/curiosities/symmetry/SymmetryWandScreen.java b/src/main/java/com/simibubi/create/modules/curiosities/symmetry/SymmetryWandScreen.java index 674fb3cea..e3cbde8ee 100644 --- a/src/main/java/com/simibubi/create/modules/curiosities/symmetry/SymmetryWandScreen.java +++ b/src/main/java/com/simibubi/create/modules/curiosities/symmetry/SymmetryWandScreen.java @@ -43,14 +43,16 @@ public class SymmetryWandScreen extends AbstractSimiScreen { private SymmetryMirror currentElement; private float animationProgress; private ItemStack wand; + private Hand hand; - public SymmetryWandScreen(ItemStack wand) { + public SymmetryWandScreen(ItemStack wand, Hand hand) { super(); currentElement = SymmetryWandItem.getMirror(wand); if (currentElement instanceof EmptyMirror) { currentElement = new PlaneMirror(Vec3d.ZERO); } + this.hand = hand; this.wand = wand; animationProgress = 0; } @@ -170,12 +172,12 @@ public class SymmetryWandScreen extends AbstractSimiScreen { @Override public void removed() { - ItemStack heldItemMainhand = minecraft.player.getHeldItemMainhand(); - CompoundNBT compound = heldItemMainhand.getTag(); + ItemStack heldItem = minecraft.player.getHeldItem(hand); + CompoundNBT compound = heldItem.getTag(); compound.put(SymmetryWandItem.SYMMETRY, currentElement.writeToNbt()); - heldItemMainhand.setTag(compound); - AllPackets.channel.send(PacketDistributor.SERVER.noArg(), new NbtPacket(heldItemMainhand)); - minecraft.player.setHeldItem(Hand.MAIN_HAND, heldItemMainhand); + heldItem.setTag(compound); + AllPackets.channel.send(PacketDistributor.SERVER.noArg(), new NbtPacket(heldItem, hand)); + minecraft.player.setHeldItem(hand, heldItem); super.removed(); } diff --git a/src/main/java/com/simibubi/create/modules/logistics/block/EntityDetectorBlock.java b/src/main/java/com/simibubi/create/modules/logistics/block/EntityDetectorBlock.java index d6b9e8d7f..d159a0235 100644 --- a/src/main/java/com/simibubi/create/modules/logistics/block/EntityDetectorBlock.java +++ b/src/main/java/com/simibubi/create/modules/logistics/block/EntityDetectorBlock.java @@ -30,8 +30,8 @@ import net.minecraft.state.StateContainer.Builder; import net.minecraft.state.properties.BlockStateProperties; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Direction; -import net.minecraft.util.Hand; import net.minecraft.util.Direction.Axis; +import net.minecraft.util.Hand; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.util.math.Vec3d; diff --git a/src/main/java/com/simibubi/create/modules/logistics/block/LinkedExtractorBlock.java b/src/main/java/com/simibubi/create/modules/logistics/block/LinkedExtractorBlock.java index 6774d518d..f3f86c89c 100644 --- a/src/main/java/com/simibubi/create/modules/logistics/block/LinkedExtractorBlock.java +++ b/src/main/java/com/simibubi/create/modules/logistics/block/LinkedExtractorBlock.java @@ -14,8 +14,8 @@ import net.minecraft.item.BlockItemUseContext; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.BlockRenderLayer; import net.minecraft.util.Direction; -import net.minecraft.util.Hand; import net.minecraft.util.Direction.Axis; +import net.minecraft.util.Hand; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockRayTraceResult; import net.minecraft.util.math.Vec3d; diff --git a/src/main/java/com/simibubi/create/modules/logistics/block/diodes/ConfigureFlexpeaterPacket.java b/src/main/java/com/simibubi/create/modules/logistics/block/diodes/ConfigureFlexpeaterPacket.java index 75431b3b6..b68759606 100644 --- a/src/main/java/com/simibubi/create/modules/logistics/block/diodes/ConfigureFlexpeaterPacket.java +++ b/src/main/java/com/simibubi/create/modules/logistics/block/diodes/ConfigureFlexpeaterPacket.java @@ -33,7 +33,9 @@ public class ConfigureFlexpeaterPacket extends TileEntityConfigurationPacket(); gathered = new HashMap<>(); } - + public void warnBlockNotLoaded() { blocksNotLoaded = true; } - + public void require(Item item) { if (required.containsKey(item)) required.put(item, required.get(item) + 1); - else + else required.put(item, 1); } - + public void collect(ItemStack stack) { Item item = stack.getItem(); if (required.containsKey(item)) if (gathered.containsKey(item)) gathered.put(item, gathered.get(item) + stack.getCount()); - else + else gathered.put(item, stack.getCount()); } @@ -55,44 +56,47 @@ public class MaterialChecklist { int itemsWritten = 0; StringBuilder string = new StringBuilder("{\"text\":\""); - + if (blocksNotLoaded) { - string.append("\n" + TextFormatting.RED + "* Disclaimer *\n\n"); - string.append("Material List may be inaccurate due to relevant chunks not being loaded."); + string.append("\n" + TextFormatting.RED + "* Disclaimer *\n\n"); + string.append("Material List may be inaccurate due to relevant chunks not being loaded."); string.append("\"}"); pages.add(new StringNBT(string.toString())); string = new StringBuilder("{\"text\":\""); } - + List keys = new ArrayList<>(required.keySet()); Collections.sort(keys, (item1, item2) -> { - String name1 = new TranslationTextComponent(((Item) item1).getTranslationKey()).getFormattedText().toLowerCase(); - String name2 = new TranslationTextComponent(((Item) item2).getTranslationKey()).getFormattedText().toLowerCase(); + Locale locale = Locale.ENGLISH; + String name1 = new TranslationTextComponent(((Item) item1).getTranslationKey()).getFormattedText() + .toLowerCase(locale); + String name2 = new TranslationTextComponent(((Item) item2).getTranslationKey()).getFormattedText() + .toLowerCase(locale); return name1.compareTo(name2); }); - + List completed = new ArrayList<>(); for (Item item : keys) { int amount = required.get(item); if (gathered.containsKey(item)) amount -= gathered.get(item); - + if (amount <= 0) { completed.add(item); continue; } - + if (itemsWritten == 6) { itemsWritten = 0; string.append("\"}"); pages.add(new StringNBT(string.toString())); string = new StringBuilder("{\"text\":\""); } - + itemsWritten++; string.append(unfinishedEntry(new ItemStack(item), amount)); } - + for (Item item : completed) { if (itemsWritten == 6) { itemsWritten = 0; @@ -100,11 +104,11 @@ public class MaterialChecklist { pages.add(new StringNBT(string.toString())); string = new StringBuilder("{\"text\":\""); } - + itemsWritten++; string.append(gatheredEntry(new ItemStack(item), required.get(item))); } - + string.append("\"}"); pages.add(new StringNBT(string.toString())); @@ -120,16 +124,16 @@ public class MaterialChecklist { int stacks = amount / 64; int remainder = amount % 64; ITextComponent tc = new TranslationTextComponent(item.getTranslationKey()); - return TextFormatting.DARK_GREEN + tc.getFormattedText() - + " \\u2714\n x" + amount + TextFormatting.GRAY + " | " + stacks + "\\u25A4 +" + remainder + "\n"; + return TextFormatting.DARK_GREEN + tc.getFormattedText() + " \\u2714\n x" + amount + TextFormatting.GRAY + " | " + + stacks + "\\u25A4 +" + remainder + "\n"; } private String unfinishedEntry(ItemStack item, int amount) { int stacks = amount / 64; int remainder = amount % 64; ITextComponent tc = new TranslationTextComponent(item.getTranslationKey()); - return TextFormatting.BLUE + tc.getFormattedText() + "\n x" + amount - + TextFormatting.GRAY + " | " + stacks + "\\u25A4 +" + remainder + "\n"; + return TextFormatting.BLUE + tc.getFormattedText() + "\n x" + amount + TextFormatting.GRAY + " | " + stacks + + "\\u25A4 +" + remainder + "\n"; } } diff --git a/src/main/java/com/simibubi/create/modules/schematics/SchematicWorld.java b/src/main/java/com/simibubi/create/modules/schematics/SchematicWorld.java index e57670ba3..d780187e2 100644 --- a/src/main/java/com/simibubi/create/modules/schematics/SchematicWorld.java +++ b/src/main/java/com/simibubi/create/modules/schematics/SchematicWorld.java @@ -3,12 +3,11 @@ package com.simibubi.create.modules.schematics; import java.util.Collections; import java.util.List; import java.util.Map; -import java.util.Random; import java.util.Set; import java.util.function.Predicate; -import com.google.common.collect.ImmutableMap; import com.simibubi.create.foundation.type.Cuboid; +import com.simibubi.create.foundation.utility.WrappedWorld; import net.minecraft.block.Block; import net.minecraft.block.BlockState; @@ -16,47 +15,34 @@ import net.minecraft.block.Blocks; import net.minecraft.entity.Entity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.fluid.Fluid; -import net.minecraft.fluid.FluidState; -import net.minecraft.fluid.Fluids; import net.minecraft.fluid.IFluidState; -import net.minecraft.particles.IParticleData; import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.SoundCategory; -import net.minecraft.util.SoundEvent; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.util.math.BlockPos; -import net.minecraft.world.DifficultyInstance; import net.minecraft.world.EmptyTickList; import net.minecraft.world.ITickList; -import net.minecraft.world.IWorld; import net.minecraft.world.LightType; import net.minecraft.world.World; import net.minecraft.world.biome.Biome; import net.minecraft.world.biome.Biomes; -import net.minecraft.world.border.WorldBorder; -import net.minecraft.world.chunk.AbstractChunkProvider; -import net.minecraft.world.chunk.ChunkStatus; -import net.minecraft.world.chunk.IChunk; -import net.minecraft.world.dimension.Dimension; -import net.minecraft.world.gen.Heightmap.Type; -import net.minecraft.world.storage.WorldInfo; -public class SchematicWorld implements IWorld { +public class SchematicWorld extends WrappedWorld { private Map blocks; private Cuboid bounds; public BlockPos anchor; - - public SchematicWorld(Map blocks, Cuboid bounds, BlockPos anchor) { + + public SchematicWorld(Map blocks, Cuboid bounds, BlockPos anchor, World original) { + super(original); this.blocks = blocks; this.setBounds(bounds); this.anchor = anchor; } - + public Set getAllPositions() { return blocks.keySet(); } - + @Override public TileEntity getTileEntity(BlockPos pos) { return null; @@ -65,11 +51,11 @@ public class SchematicWorld implements IWorld { @Override public BlockState getBlockState(BlockPos globalPos) { BlockPos pos = globalPos.subtract(anchor); - + if (pos.getY() - bounds.y == -1) { return Blocks.GRASS_BLOCK.getDefaultState(); } - + if (getBounds().contains(pos) && blocks.containsKey(pos)) { return blocks.get(pos); } else { @@ -83,7 +69,7 @@ public class SchematicWorld implements IWorld { @Override public IFluidState getFluidState(BlockPos pos) { - return new FluidState(Fluids.EMPTY, ImmutableMap.of()); + return getBlockState(pos).getFluidState(); } @Override @@ -117,46 +103,11 @@ public class SchematicWorld implements IWorld { return 0; } - @Override - public IChunk getChunk(int x, int z, ChunkStatus requiredStatus, boolean nonnull) { - return null; - } - - @Override - public BlockPos getHeight(Type heightmapType, BlockPos pos) { - return BlockPos.ZERO; - } - - @Override - public int getHeight(Type heightmapType, int x, int z) { - return 0; - } - @Override public int getSkylightSubtracted() { return 0; } - @Override - public WorldBorder getWorldBorder() { - return null; - } - - @Override - public boolean isRemote() { - return false; - } - - @Override - public int getSeaLevel() { - return 0; - } - - @Override - public Dimension getDimension() { - return null; - } - @Override public boolean hasBlockState(BlockPos pos, Predicate predicate) { return predicate.test(getBlockState(pos)); @@ -197,16 +148,11 @@ public class SchematicWorld implements IWorld { if (boundsMax.getZ() <= pos.getZ()) { bounds.length += pos.getZ() - boundsMax.getZ() + 1; } - + blocks.put(pos, arg1); return true; } - @Override - public long getSeed() { - return 0; - } - @Override public ITickList getPendingBlockTicks() { return EmptyTickList.get(); @@ -217,54 +163,6 @@ public class SchematicWorld implements IWorld { return EmptyTickList.get(); } - @Override - public World getWorld() { - return null; - } - - @Override - public WorldInfo getWorldInfo() { - return null; - } - - @Override - public DifficultyInstance getDifficultyForLocation(BlockPos pos) { - return null; - } - - @Override - public AbstractChunkProvider getChunkProvider() { - return null; - } - - @Override - public Random getRandom() { - return new Random(); - } - - @Override - public void notifyNeighbors(BlockPos pos, Block blockIn) { - } - - @Override - public BlockPos getSpawnPoint() { - return null; - } - - @Override - public void playSound(PlayerEntity player, BlockPos pos, SoundEvent soundIn, SoundCategory category, float volume, - float pitch) { - } - - @Override - public void addParticle(IParticleData particleData, double x, double y, double z, double xSpeed, double ySpeed, - double zSpeed) { - } - - @Override - public void playEvent(PlayerEntity player, int type, BlockPos pos, int data) { - } - public Cuboid getBounds() { return bounds; } diff --git a/src/main/java/com/simibubi/create/modules/schematics/block/SchematicannonTileEntity.java b/src/main/java/com/simibubi/create/modules/schematics/block/SchematicannonTileEntity.java index 5b7141296..5bb0b2674 100644 --- a/src/main/java/com/simibubi/create/modules/schematics/block/SchematicannonTileEntity.java +++ b/src/main/java/com/simibubi/create/modules/schematics/block/SchematicannonTileEntity.java @@ -535,7 +535,7 @@ public class SchematicannonTileEntity extends SyncedTileEntity implements ITicka } schematicAnchor = anchor; - blockReader = new SchematicWorld(new HashMap<>(), new Cuboid(), schematicAnchor); + blockReader = new SchematicWorld(new HashMap<>(), new Cuboid(), schematicAnchor, world); activeTemplate.addBlocksToWorld(blockReader, schematicAnchor, SchematicItem.getSettings(blueprint)); schematicLoaded = true; state = State.PAUSED; diff --git a/src/main/java/com/simibubi/create/modules/schematics/client/SchematicHandler.java b/src/main/java/com/simibubi/create/modules/schematics/client/SchematicHandler.java index b455dad32..6a406a721 100644 --- a/src/main/java/com/simibubi/create/modules/schematics/client/SchematicHandler.java +++ b/src/main/java/com/simibubi/create/modules/schematics/client/SchematicHandler.java @@ -209,7 +209,7 @@ public class SchematicHandler { if (schematic.getSize().equals(BlockPos.ZERO)) return; - SchematicWorld w = new SchematicWorld(new HashMap<>(), new Cuboid(), anchor); + SchematicWorld w = new SchematicWorld(new HashMap<>(), new Cuboid(), anchor, Minecraft.getInstance().world); PlacementSettings settings = cachedSettings.copy(); settings.setBoundingBox(null); schematic.addBlocksToWorld(w, anchor, settings); diff --git a/src/main/java/com/simibubi/create/modules/schematics/client/SchematicHologram.java b/src/main/java/com/simibubi/create/modules/schematics/client/SchematicHologram.java index b8934f0c9..8f5f13f4b 100644 --- a/src/main/java/com/simibubi/create/modules/schematics/client/SchematicHologram.java +++ b/src/main/java/com/simibubi/create/modules/schematics/client/SchematicHologram.java @@ -49,7 +49,8 @@ public class SchematicHologram { } public void startHologram(Template schematic, BlockPos anchor) { - SchematicWorld world = new SchematicWorld(new HashMap<>(), new Cuboid(BlockPos.ZERO, BlockPos.ZERO), anchor); + SchematicWorld world = new SchematicWorld(new HashMap<>(), new Cuboid(BlockPos.ZERO, BlockPos.ZERO), anchor, + Minecraft.getInstance().world); schematic.addBlocksToWorld(world, anchor, new PlacementSettings()); startHologram(world); } diff --git a/src/main/java/com/simibubi/create/modules/schematics/client/tools/Tools.java b/src/main/java/com/simibubi/create/modules/schematics/client/tools/Tools.java index 2b6965d2b..52790f748 100644 --- a/src/main/java/com/simibubi/create/modules/schematics/client/tools/Tools.java +++ b/src/main/java/com/simibubi/create/modules/schematics/client/tools/Tools.java @@ -29,7 +29,7 @@ public enum Tools { } public String getDisplayName() { - return Lang.translate("schematic.tool." + name().toLowerCase()); + return Lang.translate("schematic.tool." + Lang.asId(name())); } public ScreenResources getIcon() { @@ -45,7 +45,7 @@ public enum Tools { } public List getDescription() { - return Lang.translatedOptions("schematic.tool." + name().toLowerCase() + ".description", "0", "1", "2", "3"); + return Lang.translatedOptions("schematic.tool." + Lang.asId(name()) + ".description", "0", "1", "2", "3"); } } diff --git a/src/main/resources/assets/create/textures/gui/recipes3.png b/src/main/resources/assets/create/textures/gui/recipes3.png index c299dda80a54b94ea3b31e8d7248f056c4bf1399..2012b71db596754f74cda3324051a2c491c2ed75 100644 GIT binary patch delta 14268 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 VQhLX%_(2yxT`hf7;YGvi{{a$UF_!=U diff --git a/src/main/resources/data/create/recipes/crafting/encased_fan.json b/src/main/resources/data/create/recipes/crafting/encased_fan.json index 5c57844f9..ae505f03e 100644 --- a/src/main/resources/data/create/recipes/crafting/encased_fan.json +++ b/src/main/resources/data/create/recipes/crafting/encased_fan.json @@ -10,7 +10,7 @@ "item": "minecraft:iron_bars" }, "A": { - "item": "create:iron_sheet" + "item": "create:andesite_alloy_cube" }, "S": { "item": "create:propeller" diff --git a/src/main/resources/data/create/recipes/crafting/slime_ball.json b/src/main/resources/data/create/recipes/crafting/slime_ball.json new file mode 100644 index 000000000..2e8885ce7 --- /dev/null +++ b/src/main/resources/data/create/recipes/crafting/slime_ball.json @@ -0,0 +1,21 @@ +{ + "type": "crafting_shapeless", + "ingredients": [ + { + "tag": "forge:dyes/lime" + }, + { + "item": "create:dough" + } + ], + "result": { + "item": "minecraft:slime_ball", + "count": 1 + }, + "conditions": [ + { + "type": "create:module", + "module": "contraptions" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/create/recipes/crafting/tree_fertilizer.json b/src/main/resources/data/create/recipes/crafting/tree_fertilizer.json index 2292bf0dc..20dad4a67 100644 --- a/src/main/resources/data/create/recipes/crafting/tree_fertilizer.json +++ b/src/main/resources/data/create/recipes/crafting/tree_fertilizer.json @@ -1,9 +1,23 @@ { "type": "crafting_shapeless", "ingredients": [ - { - "item": "minecraft:horn_coral" - }, + [ + { + "item": "minecraft:horn_coral" + }, + { + "item": "minecraft:tube_coral" + }, + { + "item": "minecraft:fire_coral" + }, + { + "item": "minecraft:bubble_coral" + }, + { + "item": "minecraft:brain_coral" + } + ], { "item": "minecraft:bone_meal" }, From 3c12f84bc950182751d3aeffe3c470d6e5061107 Mon Sep 17 00:00:00 2001 From: Lucas dos Santos Abreu Date: Mon, 7 Oct 2019 14:03:16 -0300 Subject: [PATCH 4/8] trans pt-br --- .../resources/assets/create/lang/en_us.json | 184 +-- .../resources/assets/create/lang/pt_br.json | 1134 ++++++++--------- 2 files changed, 659 insertions(+), 659 deletions(-) diff --git a/src/main/resources/assets/create/lang/en_us.json b/src/main/resources/assets/create/lang/en_us.json index a1d85e7c8..7bf698b09 100644 --- a/src/main/resources/assets/create/lang/en_us.json +++ b/src/main/resources/assets/create/lang/en_us.json @@ -1,5 +1,5 @@ { - + "_comment": "-------------------------] GAME ELEMENTS [------------------------------------------------", "item.create.symmetry_wand": "Staff of Symmetry", @@ -23,32 +23,32 @@ "item.create.propeller": "Propeller", "item.create.flour": "Wheat Flour", "item.create.dough": "Dough", - + "item.create.blazing_pickaxe": "Blazing Pickaxe", "item.create.blazing_shovel": "Blazing Shovel", "item.create.blazing_axe": "Blazing Axe", "item.create.blazing_sword": "Blazing Longsword", - + "item.create.shadow_steel_pickaxe": "Shadow Steel Pickaxe", "item.create.shadow_steel_mattock": "Shadow Steel Garden Mattock", "item.create.shadow_steel_sword": "Shadow Steel Sword", - + "item.create.rose_quartz_pickaxe": "Gilded Quartz Pickaxe", "item.create.rose_quartz_shovel": "Gilded Quartz Shovel", "item.create.rose_quartz_axe": "Gilded Quartz Axe", "item.create.rose_quartz_sword": "Gilded Quartz Blade", - + "block.create.cogwheel": "Cogwheel", - "block.create.large_cogwheel": "Large Cogwheel", - "block.create.turntable": "Turntable", - "block.create.gearbox": "Gearbox", + "block.create.large_cogwheel": "Large Cogwheel", + "block.create.turntable": "Turntable", + "block.create.gearbox": "Gearbox", "block.create.gearshift": "Gearshift", "block.create.clutch": "Clutch", - "block.create.shaft": "Shaft", + "block.create.shaft": "Shaft", "block.create.encased_belt": "Encased Belt", "block.create.encased_shaft": "Encased Shaft", "block.create.encased_fan": "Encased Fan", - "block.create.motor": "Motor", + "block.create.motor": "Motor", "block.create.belt": "Mechanical Belt", "block.create.crushing_wheel": "Crushing Wheel", "block.create.drill": "Mechanical Drill", @@ -56,7 +56,7 @@ "block.create.water_wheel": "Water Wheel", "block.create.belt_support": "Belt Support", "block.create.mechanical_press": "Mechanical Press", - + "block.create.sticky_mechanical_piston": "Sticky Mechanical Piston", "block.create.mechanical_piston": "Mechanical Piston", "block.create.mechanical_piston_head": "Mechanical Piston Head", @@ -75,15 +75,15 @@ "block.create.pulse_repeater": "Pulse Repeater", "block.create.flexpeater": "FlexPeater", "block.create.entity_detector": "Belt Observer", - + "block.create.tiled_glass": "Tiled Glass", "block.create.tiled_glass_pane": "Tiled Glass Pane", - + "block.create.window_in_a_block": "Block with Glass Pane", "block.create.andesite_bricks": "Andesite Bricks", "block.create.diorite_bricks": "Diorite Bricks", "block.create.granite_bricks": "Granite Bricks", - + "block.create.gabbro": "Gabbro", "block.create.gabbro_stairs": "Gabbro Stairs", "block.create.gabbro_slab": "Gabbro Slab", @@ -98,7 +98,7 @@ "block.create.indented_gabbro_slab": "Indented Gabbro Slab", "block.create.slightly_mossy_gabbro_bricks": "Mossy Gabbro Bricks", "block.create.mossy_gabbro_bricks": "Overgrown Gabbro Bricks", - + "block.create.weathered_limestone": "Weathered Limestone", "block.create.weathered_limestone_stairs": "Weathered Limestone Stairs", "block.create.weathered_limestone_wall": "Weathered Limestone Wall", @@ -110,7 +110,7 @@ "block.create.weathered_limestone_bricks_wall": "Weathered Limestone Brick Wall", "block.create.weathered_limestone_bricks_slab": "Weathered Limestone Brick Slab", "block.create.weathered_limestone_pillar": "Weathered Limestone Pillar", - + "block.create.dolomite_pillar": "Dolomite Pillar", "block.create.dolomite": "Dolomite", "block.create.dolomite_stairs": "Dolomite Stairs", @@ -121,7 +121,7 @@ "block.create.dolomite_bricks_stairs": "Dolomite Brick Stairs", "block.create.dolomite_bricks_slab": "Dolomite Brick Slab", "block.create.polished_dolomite": "Polished Dolomite", - + "block.create.limesand": "Limesand", "block.create.limestone": "Limestone", "block.create.limestone_stairs": "Limestone Stairs", @@ -134,22 +134,22 @@ "block.create.polished_limestone": "Polished Limestone", "block.create.polished_limestone_slab": "Polished Limestone Slab", "block.create.limestone_pillar": "Limestone Pillar", - + "block.create.schematicannon": "Schematicannon", "block.create.schematic_table": "Schematic Table", "block.create.creative_crate": "Schematicannon Creatifier", "block.create.cocoa_log": "Cocoa Jungle Log", - + "block.create.shop_shelf": "Shelf", - + "_comment": "-------------------------] UI & MESSAGES [------------------------------------------------", "death.attack.create.crush": "%1$s was processed by Crushing Wheels", "death.attack.create.fan_fire": "%1$s was burned to death by hot air", "death.attack.create.fan_lava": "%1$s was burned to death by lava fan", "death.attack.create.drill": "%1$s was impaled by Mechanical Drill", - + "create.recipe.crushing": "Crushing", "create.recipe.splashing": "Bulk Washing", "create.recipe.splashing.fan": "Fan behind Flowing Water", @@ -160,7 +160,7 @@ "create.recipe.pressing": "Mechanical Press", "create.recipe.blockzapperUpgrade": "Handheld Blockzapper", "create.recipe.processing.chance": "%1$s%% Chance", - + "create.generic.range": "Range", "create.generic.radius": "Radius", "create.generic.speed": "Speed", @@ -168,23 +168,23 @@ "create.generic.unit.ticks": "Ticks", "create.generic.unit.seconds": "Seconds", "create.generic.unit.minutes": "Minutes", - + "create.action.scroll": "Scroll", "create.action.confirm": "Confirm", "create.action.abort": "Abort", "create.action.saveToFile": "Save", "create.action.discard": "Discard", - + "create.keyinfo.toolmenu": "Focus Tool Menu", - + "create.gui.scrollInput.defaultTitle": "Choose an Option:", "create.gui.scrollInput.scrollToModify": "Scroll to Modify", "create.gui.scrollInput.scrollToSelect": "Scroll to Select", "create.gui.scrollInput.shiftScrollsFaster": "Shift to Scroll faster", - + "create.gui.toolmenu.focusKey": "Hold [%1$s] to Focus", "create.gui.toolmenu.cycle": "[SCROLL] to Cycle", - + "create.gui.symmetryWand.mirrorType": "Mirror", "create.gui.symmetryWand.orientation": "Orientation", "create.symmetry.mirror.plane": "Mirror once", @@ -195,7 +195,7 @@ "create.orientation.horizontal": "Horizontal", "create.orientation.alongZ": "Along Z", "create.orientation.alongX": "Along X", - + "create.gui.blockzapper.title": "Handheld Blockzapper", "create.gui.blockzapper.replaceMode": "Replace Mode", "create.gui.blockzapper.searchDiagonal": "Follow Diagonals", @@ -208,7 +208,7 @@ "create.gui.blockzapper.pattern.chance25": "25% Roll", "create.gui.blockzapper.pattern.chance50": "50% Roll", "create.gui.blockzapper.pattern.chance75": "75% Roll", - + "create.blockzapper.usingBlock": "Using: %1$s", "create.blockzapper.componentUpgrades": "Component Upgrades:", "create.blockzapper.component.body": "Body", @@ -221,14 +221,14 @@ "create.blockzapper.componentTier.choruschrome": "Chorus Chrome", "create.blockzapper.leftClickToSet": "Left-Click a Block to set Material", "create.blockzapper.empty": "Out of Blocks!", - + "create.logistics.filter": "Filter", "create.logistics.firstFrequency": "Freq. #1", "create.logistics.secondFrequency": "Freq. #2", - + "create.gui.flexcrate.title": "FlexCrate", "create.gui.flexcrate.storageSpace": "Storage Space", - + "create.gui.stockswitch.title": "Stockpile Switch", "create.gui.stockswitch.lowerLimit": "Lower Threshold", "create.gui.stockswitch.upperLimit": "Upper Threshold", @@ -236,7 +236,7 @@ "create.gui.stockswitch.startAbove": "Start Signal above", "create.gui.stockswitch.stopAt": "Stop Signal at", "create.gui.stockswitch.stopBelow": "Stop Signal below", - + "create.schematicAndQuill.dimensions": "Schematic Size: %1$sx%2$sx%3$s", "create.schematicAndQuill.firstPos": "First position set.", "create.schematicAndQuill.secondPos": "Second position set.", @@ -245,7 +245,7 @@ "create.schematicAndQuill.prompt": "Enter a name for the Schematic:", "create.schematicAndQuill.fallbackName": "My Schematic", "create.schematicAndQuill.saved": "Saved as %1$s", - + "create.schematic.invalid": "[!] Invalid Item - Use the Schematic Table instead", "create.schematic.position": "Position", "create.schematic.rotation": "Rotation", @@ -257,14 +257,14 @@ "create.schematic.mirror.none": "None", "create.schematic.mirror.frontBack": "Front-Back", "create.schematic.mirror.leftRight": "Left-Right", - + "create.schematic.tool.deploy": "Deploy", "create.schematic.tool.move": "Move XZ", "create.schematic.tool.movey": "Move Y", "create.schematic.tool.rotate": "Rotate", "create.schematic.tool.print": "Print", "create.schematic.tool.flip": "Flip", - + "create.schematic.tool.deploy.description.0": "Moves the structure to a location.", "create.schematic.tool.deploy.description.1": "Right-Click on the ground to place.", "create.schematic.tool.deploy.description.2": "Hold [Ctrl] to select at a fixed distance.", @@ -289,17 +289,17 @@ "create.schematic.tool.flip.description.1": "Point at the Schematic and [CTRL]-Scroll to flip it.", "create.schematic.tool.flip.description.2": "", "create.schematic.tool.flip.description.3": "", - + "create.schematics.synchronizing": "Syncing...", "create.schematics.uploadTooLarge": "Your schematic is too large", "create.schematics.maxAllowedSize": "The maximum allowed schematic file size is:", - + "create.gui.schematicTable.title": "Schematic Table", "create.gui.schematicTable.availableSchematics": "Available Schematics", "create.gui.schematicTable.noSchematics": "No Schematics Saved", "create.gui.schematicTable.uploading": "Uploading...", "create.gui.schematicTable.finished": "Upload Finished!", - + "create.gui.schematicannon.title": "Schematicannon", "create.gui.schematicannon.settingsTitle": "Placement Settings", "create.gui.schematicannon.listPrinter": "Material List Printer", @@ -314,14 +314,14 @@ "create.gui.schematicannon.option.replaceWithEmpty": "Replace Solid with Empty", "create.gui.schematicannon.option.skipMissing": "Skip missing Blocks", "create.gui.schematicannon.option.skipTileEntities": "Protect Tile Entities", - + "create.gui.schematicannon.option.skipMissing.description": "If the Schematicannon cannot find a required Block for placement, it will continue at the next Location.", "create.gui.schematicannon.option.skipTileEntities.description": "The Schematicannon will avoid replacing data holding blocks such as Chests.", "create.gui.schematicannon.option.dontReplaceSolid.description": "The cannon will never replace any Solid blocks in its working area, only non-Solid and Air.", "create.gui.schematicannon.option.replaceWithSolid.description": "The cannon will only replace Solid blocks in its working area, if the Schematic contains a solid Block at their location.", "create.gui.schematicannon.option.replaceWithAny.description": "The cannon will replace Solid blocks in its working area, if the Schematic contains any Block at their location.", "create.gui.schematicannon.option.replaceWithEmpty.description": "The cannon will clear out all blocks in its working area, including those replaced by Air.", - + "create.schematicannon.status.idle": "Idle", "create.schematicannon.status.ready": "Ready", "create.schematicannon.status.running": "Running", @@ -339,14 +339,14 @@ "create.schematicannon.status.schematicInvalid": "Schematic Invalid", "create.schematicannon.status.schematicNotPlaced": "Schematic not Deployed", "create.schematicannon.status.schematicExpired": "Schematic File Expired", - + "create.tooltip.holdKey": "Hold [%1$s]", "create.tooltip.holdKeyOrKey": "Hold [%1$s] or [%2$s]", "create.tooltip.keyShift": "Shift", "create.tooltip.keyCtrl": "Ctrl", - + "_comment": "-------------------------] ITEM DESCRIPTIONS [------------------------------------------------", - + "item.create.example_item.tooltip": "EXAMPLE ITEM (just a marker that this tooltip exists)", "item.create.example_item.tooltip.summary": "A brief description of the item. _Underscores_ highlight a term.", "item.create.example_item.tooltip.condition1": "When this", @@ -354,8 +354,8 @@ "item.create.example_item.tooltip.condition2": "And When this", "item.create.example_item.tooltip.behaviour2": "You can add as many behaviours as you like", "item.create.example_item.tooltip.control1": "When Ctrl pressed", - "item.create.example_item.tooltip.action1": "These controls are displayed.", - + "item.create.example_item.tooltip.action1": "These controls are displayed.", + "item.create.symmetry_wand.tooltip": "SYMMETRY WAND", "item.create.symmetry_wand.tooltip.summary": "Perfectly mirrors your Block placement across the configured planes.", "item.create.symmetry_wand.tooltip.condition1": "When in Hotbar", @@ -366,7 +366,7 @@ "item.create.symmetry_wand.tooltip.action2": "_Removes_ the active Mirror", "item.create.symmetry_wand.tooltip.control3": "R-Click while Sneaking", "item.create.symmetry_wand.tooltip.action3": "Opens the _Configuration_ _Interface_", - + "item.create.placement_handgun.tooltip": "BLOCKZAPPER", "item.create.placement_handgun.tooltip.summary": "Novel gadget for placing or exchanging blocks at a distance.", "item.create.placement_handgun.tooltip.control1": "L-Click at Block", @@ -375,27 +375,27 @@ "item.create.placement_handgun.tooltip.action2": "_Places_ or _Replaces_ the targeted block.", "item.create.placement_handgun.tooltip.control3": "R-Click while Sneaking", "item.create.placement_handgun.tooltip.action3": "Opens the _Configuration_ _Interface_", - + "item.create.tree_fertilizer.tooltip": "TREE FERTILIZER", "item.create.tree_fertilizer.tooltip.summary": "A powerful combination of minerals suitable for common tree types", "item.create.tree_fertilizer.tooltip.condition1": "When used on Sapling", - "item.create.tree_fertilizer.tooltip.behaviour1": "Grows Trees regardless of their spacing Conditions", - + "item.create.tree_fertilizer.tooltip.behaviour1": "Grows Trees regardless of their spacing Conditions", + "block.create.cocoa_log.tooltip": "COCOA LOG", "block.create.cocoa_log.tooltip.summary": "An augmented jungle log allowing for easier automation of _Cocoa_ _Beans_", "block.create.cocoa_log.tooltip.condition1": "When Mature", "block.create.cocoa_log.tooltip.behaviour1": "Grows _Cocoa_ _Pods_ on all sides", - + "item.create.empty_blueprint.tooltip": "EMPTY SCHEMATIC", "item.create.empty_blueprint.tooltip.summary": "Used as a recipe ingredient and for writing at the _Schematic_ _Table_", - + "item.create.blueprint.tooltip": "SCHEMATIC", "item.create.blueprint.tooltip.summary": "Holds a structure to be positioned and placed into the world. Position the Hologram as desired and use a _Schematicannon_ to build it.", "item.create.blueprint.tooltip.condition1": "When Held", "item.create.blueprint.tooltip.behaviour1": "Can be positioned using the Tools on Screen", "item.create.blueprint.tooltip.control1": "R-Click while Sneaking", "item.create.blueprint.tooltip.action1": "Opens an _Interface_ for entering exact _Coordinates._", - + "item.create.blueprint_and_quill.tooltip": "SCHEMATIC AND QUILL", "item.create.blueprint_and_quill.tooltip.summary": "Used for saving a Structure in your world to a .nbt file.", "item.create.blueprint_and_quill.tooltip.condition1": "Step 1", @@ -408,62 +408,62 @@ "item.create.blueprint_and_quill.tooltip.action2": "Select points in _mid-air_. _Scroll_ to adjust the distance.", "item.create.blueprint_and_quill.tooltip.control3": "R-Click while Sneaking", "item.create.blueprint_and_quill.tooltip.action3": "_Resets_ and removes the selection.", - + "block.create.creative_crate.tooltip": "CREATIVE CRATE", "block.create.creative_crate.tooltip.summary": "Provides an endless supply of blocks to adjacent _Schematicannons_", - + "block.create.schematicannon.tooltip": "SCHEMATICANNON", "block.create.schematicannon.tooltip.summary": "Shoots blocks to recreate a deployed _Schematic_ in the World. Uses items from adjacent Inventories and _Gunpowder_ as fuel.", "block.create.schematicannon.tooltip.control1": "When R-Clicked", "block.create.schematicannon.tooltip.action1": "Opens the _Interface_", - + "block.create.schematic_table.tooltip": "SCHEMATIC TABLE", "block.create.schematic_table.tooltip.summary": "Writes saved Schematics onto an _Empty_ _Schematic_", "block.create.schematic_table.tooltip.condition1": "When given an Empty Schematic", "block.create.schematic_table.tooltip.behaviour1": "Uploads a chosen File from your Schematics Folder", - + "block.create.shaft.tooltip": "SHAFT", "block.create.shaft.tooltip.summary": "_Relays_ _Rotation_ in a straight line.", - + "block.create.cogwheel.tooltip": "COGWHEEL", "block.create.cogwheel.tooltip.summary": "_Relays_ _Rotation_ in a straigt line, and to adjacent _Cogwheels._", "block.create.large_cogwheel.tooltip": "LARGE COGWHEEL", "block.create.large_cogwheel.tooltip.summary": "A larger version of the _Cogwheel,_ allowing for _change_ in _Rotation_ _Speed_ when connected to its smaller Counterpart.", - + "block.create.encased_shaft.tooltip": "ENCASED SHAFT", "block.create.encased_shaft.tooltip.summary": "_Relays_ _Rotation_ in a straight line. Suitable for propagating Rotation through Walls.", "block.create.gearbox.tooltip": "GEARBOX", "block.create.gearbox.tooltip.summary": "_Relays_ _Rotation_ to _Four_ _directions._ Reverses straight connections.", - + "block.create.gearshift.tooltip": "GEARSHIFT", "block.create.gearshift.tooltip.summary": "A controllable _rotation_ _switch_ for connected shafts.", "block.create.gearshift.tooltip.condition1": "When Powered", "block.create.gearshift.tooltip.behaviour1": "_Reverses_ the outgoing rotation.", - + "block.create.clutch.tooltip": "CLUTCH", "block.create.clutch.tooltip.summary": "A controllable _rotation_ _switch_ for connected shafts.", "block.create.clutch.tooltip.condition1": "When Powered", "block.create.clutch.tooltip.behaviour1": "_Stops_ conveying rotation to the other side.", - + "block.create.encased_belt.tooltip": "ENCASED_BELT", "block.create.encased_belt.tooltip.summary": "_Relays_ _Rotation_ through its block and to an attached _Encased_ _Belt._", "block.create.encased_belt.tooltip.condition1": "When Attached to other Encased Belt", "block.create.encased_belt.tooltip.behaviour1": "Attached Block will have the exact same rotation speed and direction. Attached Belts do not have to face the same way.", - + "item.create.belt_connector.tooltip": "BELT CONNECTOR", "item.create.belt_connector.tooltip.summary": "Connects two _Shafts_ with a _Mechanical_ _Belt._ Connected shafts will have the exact same rotation speed and direction. The Belt can act as a _Conveyor_ for _Entities._", "item.create.belt_connector.tooltip.control1": "R-Clicked on Shaft", "item.create.belt_connector.tooltip.action1": "Selects the shaft as one pulley of the Belt. Both selected Shafts have to _line_ _up_ either _Vertically,_ _Horizontally_ or _Diagonally_ towards the Belt's Direction.", "item.create.belt_connector.tooltip.control2": "R-Click while Sneaking", "item.create.belt_connector.tooltip.action2": "_Resets_ the first selected position for the Belt", - + "block.create.belt_support.tooltip": "BELT SUPPORT", "block.create.belt_support.tooltip.summary": "A _purely_ _decorational_ block suitable for mounting _Mechanical_ _Belts_ to the Ground.", "block.create.belt_support.tooltip.condition1": "When placed below a Belt", - "block.create.belt_support.tooltip.behaviour1": "Supports the top of the Belt, hiding the bottom layer.", - + "block.create.belt_support.tooltip.behaviour1": "Supports the top of the Belt, hiding the bottom layer.", + "block.create.motor.tooltip": "MOTOR", "block.create.motor.tooltip.summary": "A configurable source of _Rotational_ _Force_", @@ -493,55 +493,55 @@ "block.create.mechanical_press.tooltip.behaviour1": "_Starts_ to compress items dropped below it.", "block.create.mechanical_press.tooltip.condition2": "When Above a Mechanical Belt", "block.create.mechanical_press.tooltip.behaviour2": "_Automatically_ compresses bypassing items on the Belt.", - + "block.create.mechanical_piston.tooltip": "MECHANICAL PISTON", "block.create.mechanical_piston.tooltip.summary": "A more advanced version of the _Piston,_ using _Rotational_ _Force_ to precisely move attached structures. _Piston_ _Extension_ _Poles_ at the rear define the _Range_ of this Device. Without extensions, the piston will not move. Use _Translation_ _Chassis_ to move more than a single line of blocks.", "block.create.mechanical_piston.tooltip.condition1": "When Rotated", "block.create.mechanical_piston.tooltip.behaviour1": "Starts moving the attached structure. Speed and direction correlate to the incoming Rotation Speed.", - + "block.create.sticky_mechanical_piston.tooltip": "STICKY MECHANICAL PISTON", "block.create.sticky_mechanical_piston.tooltip.summary": "A more advanced version of the _Sticky_ _Piston,_ using _Rotational_ _Force_ to precisely move attached structures. _Piston_ _Extension_ _Poles_ at the rear define the _Range_ of this Device. Without extensions, the piston will not move. Use _Translation_ _Chassis_ to move more than a single line of blocks.", "block.create.sticky_mechanical_piston.tooltip.condition1": "When Rotated", "block.create.sticky_mechanical_piston.tooltip.behaviour1": "Starts moving the attached structure. Speed and direction correlate to the incoming Rotation Speed.", - + "block.create.piston_pole.tooltip": "PISTON POLE", "block.create.piston_pole.tooltip.summary": "Used to increase the extension range of _Mechanical_ _Pistons_", "block.create.piston_pole.tooltip.condition1": "When attached to Mechanical Piston", "block.create.piston_pole.tooltip.behaviour1": "Extends the pistons extension range by 1 block", - + "block.create.mechanical_bearing.tooltip": "MECHANICAL BEARING", "block.create.mechanical_bearing.tooltip.summary": "Used for rotating _larger_ _structures_ or generating _Rotational_ _Force_ from wind.", "block.create.mechanical_bearing.tooltip.condition1": "When Rotated", "block.create.mechanical_bearing.tooltip.behaviour1": "Starts physically rotating attached _Rotation_ _Chassis_ and their attached blocks respectively.", "block.create.mechanical_bearing.tooltip.condition2": "When Powered by Redstone", "block.create.mechanical_bearing.tooltip.behaviour2": "Starts providing _Rotational_ _Force_ from rotating its attached structure. The Structure has to include suitable _Sail_ _Blocks_ (Currently any Wool Block).", - + "block.create.translation_chassis.tooltip": "TRANSLATION CHASSIS", "block.create.translation_chassis.tooltip.summary": "A configurable base for Structures moved by a _Mechanical_ _Piston._ These Blocks have to form the first Layer of blocks in front of the Piston.", "block.create.translation_chassis.tooltip.condition1": "When Moved by Mechanical Piston", "block.create.translation_chassis.tooltip.behaviour1": "_Moves_ all _attached_ _Chassis_ with the same orientation, and attached Blocks in front of it. When the Piston retracts, blocks will only be pulled if the chassis' face is _Sticky_ (See [Ctrl]).", "block.create.translation_chassis.tooltip.control1": "When R-Clicked with Slime Ball", "block.create.translation_chassis.tooltip.action1": "Makes the clicked face _Sticky._ When the piston retracts, the chassis will _pull_ _back_ all attached Blocks in its column and within the configured Range.", - + "block.create.rotation_chassis.tooltip": "ROTATION CHASSIS", "block.create.rotation_chassis.tooltip.summary": "Required for rotating structures with the _Mechanical_ _Bearing._ ", "block.create.rotation_chassis.tooltip.condition1": "When Rotated by Bearing", "block.create.rotation_chassis.tooltip.behaviour1": "_Rotates_ all blocks attached to _Sticky_ sides (See [Ctrl]) within the configured range around itself. _Transmits_ the rotation to further attached Rotation Chassis.", "block.create.rotation_chassis.tooltip.control1": "When R-Clicked with Slime Ball", "block.create.rotation_chassis.tooltip.action1": "Makes the clicked face _Sticky._ When the Chassis rotates, all blocks attached to this side will be rotated with it.", - + "block.create.drill.tooltip": "MECHANICAL DRILL", "block.create.drill.tooltip.summary": "A mechanical device suitable for _breaking_ _blocks._", "block.create.drill.tooltip.condition1": "When Rotated", "block.create.drill.tooltip.behaviour1": "Acts as a _stationary_ Block Breaker. Also _hurts_ _entities_ in its effective area.", "block.create.drill.tooltip.condition2": "When Pushed by Mechanical Piston", - "block.create.drill.tooltip.behaviour2": "Breaks Blocks the drill is running into.", - + "block.create.drill.tooltip.behaviour2": "Breaks Blocks the drill is running into.", + "block.create.harvester.tooltip": "MECHANICAL HARVESTER", "block.create.harvester.tooltip.summary": "A mechanical plant cutter suitable for medium scale crop automation", "block.create.harvester.tooltip.condition1": "When Pushed by Mechanical Piston", "block.create.harvester.tooltip.behaviour1": "_Harvests_ all _mature_ _crops_ the blade is running into, and resets them to their initial growth state.", - + "block.create.stockswitch.tooltip": "STOCKSWITCH", "block.create.stockswitch.tooltip.summary": "Toggles a Redstone signal based on the _Storage_ _Space_ in the attached Container.", "block.create.stockswitch.tooltip.condition1": "When below Lower Limit", @@ -550,7 +550,7 @@ "block.create.stockswitch.tooltip.behaviour2": "Starts providing _Redstone_ _Power_ until Lower Limit is reached again.", "block.create.stockswitch.tooltip.control1": "When R-Clicked", "block.create.stockswitch.tooltip.action1": "Opens the _Configuration_ _Interface_", - + "block.create.redstone_bridge.tooltip": "REDSTONE LINK", "block.create.redstone_bridge.tooltip.summary": "Endpoints for _Wireless_ _Redstone_ connections. Can be assigned _Frequencies_ using any item. Signal range is limited, but reasonably far.", "block.create.redstone_bridge.tooltip.condition1": "When Powered", @@ -559,50 +559,50 @@ "block.create.redstone_bridge.tooltip.action1": "Sets the _Frequency_ to that item. A total of _two_ _different_ _items_ can be used in combination for defining a Frequency.", "block.create.redstone_bridge.tooltip.control2": "When R-Clicked while Sneaking", "block.create.redstone_bridge.tooltip.action2": "Toggles between _Receiver_ and _Transmitter_ Mode.", - + "block.create.contact.tooltip": "REDSTONE CONTACT", "block.create.contact.tooltip.summary": "A simple device for advanced Redstone Contraptions.", "block.create.contact.tooltip.condition1": "When facing other Contact", "block.create.contact.tooltip.behaviour1": "Provides a _Redstone_ _Signal_", "block.create.contact.tooltip.condition2": "When moved by Mechanical Piston", - "block.create.contact.tooltip.behaviour2": "Triggers all stationary Contacts passing by", - + "block.create.contact.tooltip.behaviour2": "Triggers all stationary Contacts passing by", + "block.create.flexcrate.tooltip": "FLEXCRATE", "block.create.flexcrate.tooltip.summary": "This _Storage_ _Container_ allows Manual control over its capacity. It can hold up to _16_ _Stacks_ of any Item", "block.create.flexcrate.tooltip.control1": "When R-Clicked", - "block.create.flexcrate.tooltip.action1": "Opens the _Interface_", - + "block.create.flexcrate.tooltip.action1": "Opens the _Interface_", + "block.create.extractor.tooltip": "EXTRACTOR", "block.create.extractor.tooltip.summary": "_Takes_ _items_ from an attached _Inventory_ and drops them onto the ground. Will not drop Items until the space cleared. Can be assigned an item-stack as a _filter._", "block.create.extractor.tooltip.condition1": "When Powered by Redstone", "block.create.extractor.tooltip.behaviour1": "_Pauses_ the Extractor", "block.create.extractor.tooltip.control1": "R-Click on Filter Space", - "block.create.extractor.tooltip.action1": "Assigns currently _held_ _stack_ as the _Filter._ Extractor will pull the item _type_ and _count_ of the filter stack exclusively.", - + "block.create.extractor.tooltip.action1": "Assigns currently _held_ _stack_ as the _Filter._ Extractor will pull the item _type_ and _count_ of the filter stack exclusively.", + "block.create.linked_extractor.tooltip": "LINKED EXTRACTOR", "block.create.linked_extractor.tooltip.summary": "_Takes_ _items_ from an attached _Inventory_ and drops them onto the ground. Will not drop Items until the space cleared. Can be assigned an item-stack as a _filter._ Can be controlled remotely via a _Redstone_ _Link._", "block.create.linked_extractor.tooltip.condition1": "When Redstone Link Active", "block.create.linked_extractor.tooltip.behaviour1": "_Pauses_ the Extractor", "block.create.linked_extractor.tooltip.control1": "R-Click on Filter Space", - "block.create.linked_extractor.tooltip.action1": "Assigns currently _held_ _stack_ as the _Filter._ Extractor will pull the item _type_ and _count_ of the filter stack exclusively.", + "block.create.linked_extractor.tooltip.action1": "Assigns currently _held_ _stack_ as the _Filter._ Extractor will pull the item _type_ and _count_ of the filter stack exclusively.", "block.create.linked_extractor.tooltip.control2": "R-Click on Frequency Space", - "block.create.linked_extractor.tooltip.action2": "Assigns currently _held_ _item_ as part of the Frequency listened on. Whenever a transmitting _Redstone_ _Link_ of the same frequency is powered, this Extractor will pause.", - + "block.create.linked_extractor.tooltip.action2": "Assigns currently _held_ _item_ as part of the Frequency listened on. Whenever a transmitting _Redstone_ _Link_ of the same frequency is powered, this Extractor will pause.", + "block.create.belt_funnel.tooltip": "BELT FUNNEL", "block.create.belt_funnel.tooltip.summary": "Collects incoming items on a _Mechanical_ _Belt_ and inserts them into the attached _Inventory_ if possible. Has to be directly _on_ _top_ of a Belt, with the opening facing against the Belts' movement direction. The inventory has to be on the same height as the funnel.", - + "block.create.entity_detector.tooltip": "BELT OBSERVER", "block.create.entity_detector.tooltip.summary": "Detects items passing by on a _Mechanical_ _Belt_ in front of it. Works well with a _Piston_ on top, pushing certain items off.", "block.create.entity_detector.tooltip.condition1": "When item matches Filter", "block.create.entity_detector.tooltip.behaviour1": "Provides a short _Redstone_ _pulse_ to all sides. An Empty Filter matches all passing items.", "block.create.entity_detector.tooltip.control1": "R-Click on Filter Space", - "block.create.entity_detector.tooltip.action1": "Assigns currently _held_ _stack_ as the _Filter._ Observer will react to this item type only.", - + "block.create.entity_detector.tooltip.action1": "Assigns currently _held_ _stack_ as the _Filter._ Observer will react to this item type only.", + "block.create.pulse_repeater.tooltip": "PULSE REPEATER", "block.create.pulse_repeater.tooltip.summary": "A simple circuit for cutting passing redstone signals to a length of _1_ _tick._", - + "block.create.flexpeater.tooltip": "FLEX REPEATER", "block.create.flexpeater.tooltip.summary": "An advanced _Redstone_ _Repeater_ with a _configurable_ _Delay_ up to 30 Minutes.", - + "itemGroup.create": "Create" } diff --git a/src/main/resources/assets/create/lang/pt_br.json b/src/main/resources/assets/create/lang/pt_br.json index a1d85e7c8..5363b7d59 100644 --- a/src/main/resources/assets/create/lang/pt_br.json +++ b/src/main/resources/assets/create/lang/pt_br.json @@ -1,608 +1,608 @@ { - + "_comment": "-------------------------] GAME ELEMENTS [------------------------------------------------", - "item.create.symmetry_wand": "Staff of Symmetry", - "item.create.placement_handgun": "Handheld Blockzapper", - "item.create.tree_fertilizer": "Tree Fertilizer", - "item.create.empty_blueprint": "Empty Schematic", - "item.create.andesite_alloy_cube": "Andesite Alloy", - "item.create.blaze_brass_cube": "Blaze Brass", - "item.create.chorus_chrome_cube": "Chorus Chrome", - "item.create.chromatic_compound_cube": "Chromatic Compound", - "item.create.shadow_steel_cube": "Shadow Steel", - "item.create.blueprint_and_quill": "Schematic and Quill", - "item.create.blueprint": "Schematic", - "item.create.belt_connector": "Mechanical Belt", - "item.create.filter": "Filter", - "item.create.rose_quartz": "Rose Quartz", - "item.create.refined_rose_quartz": "Refined Rose Quartz", - "item.create.refined_radiance_cube": "Refined Radiance", - "item.create.iron_sheet": "Iron Sheets", - "item.create.gold_sheet": "Gold Sheets", - "item.create.propeller": "Propeller", - "item.create.flour": "Wheat Flour", - "item.create.dough": "Dough", - - "item.create.blazing_pickaxe": "Blazing Pickaxe", - "item.create.blazing_shovel": "Blazing Shovel", - "item.create.blazing_axe": "Blazing Axe", - "item.create.blazing_sword": "Blazing Longsword", - - "item.create.shadow_steel_pickaxe": "Shadow Steel Pickaxe", - "item.create.shadow_steel_mattock": "Shadow Steel Garden Mattock", - "item.create.shadow_steel_sword": "Shadow Steel Sword", - - "item.create.rose_quartz_pickaxe": "Gilded Quartz Pickaxe", - "item.create.rose_quartz_shovel": "Gilded Quartz Shovel", - "item.create.rose_quartz_axe": "Gilded Quartz Axe", - "item.create.rose_quartz_sword": "Gilded Quartz Blade", - - "block.create.cogwheel": "Cogwheel", - "block.create.large_cogwheel": "Large Cogwheel", - "block.create.turntable": "Turntable", - "block.create.gearbox": "Gearbox", - "block.create.gearshift": "Gearshift", - "block.create.clutch": "Clutch", - "block.create.shaft": "Shaft", - "block.create.encased_belt": "Encased Belt", - "block.create.encased_shaft": "Encased Shaft", - "block.create.encased_fan": "Encased Fan", - "block.create.motor": "Motor", - "block.create.belt": "Mechanical Belt", - "block.create.crushing_wheel": "Crushing Wheel", - "block.create.drill": "Mechanical Drill", - "block.create.harvester": "Mechanical Harvester", - "block.create.water_wheel": "Water Wheel", - "block.create.belt_support": "Belt Support", - "block.create.mechanical_press": "Mechanical Press", - - "block.create.sticky_mechanical_piston": "Sticky Mechanical Piston", - "block.create.mechanical_piston": "Mechanical Piston", - "block.create.mechanical_piston_head": "Mechanical Piston Head", - "block.create.piston_pole": "Piston Extension Pole", - "block.create.mechanical_bearing": "Mechanical Bearing", - "block.create.translation_chassis": "Translation Chassis", - "block.create.rotation_chassis": "Rotation Chassis", + "item.create.symmetry_wand": "Varinha de Simetria", + "item.create.placement_handgun": "Blockzapper Portátil", + "item.create.tree_fertilizer": "Fertilizante de Árvore", + "item.create.empty_blueprint": "Esquema vazio", + "item.create.andesite_alloy_cube": "Liga de Andesite", + "item.create.blaze_brass_cube": "Latão de Blaze", + "item.create.chorus_chrome_cube": "Coro Cromada", + "item.create.chromatic_compound_cube": "Composto Cromático", + "item.create.shadow_steel_cube": "Aço Sombrio", + "item.create.blueprint_and_quill": "Esquema e pena", + "item.create.blueprint": "Esquema", + "item.create.belt_connector": "Esteira Mecânica", + "item.create.filter": "Filtro", + "item.create.rose_quartz": "Quartzo Rosa", + "item.create.refined_rose_quartz": "Quartzo Rosa Refinado", + "item.create.refined_radiance_cube": "Esplendor Refinado", + "item.create.iron_sheet": "Placas de Ferro", + "item.create.gold_sheet": "Placas de Outro", + "item.create.propeller": "Hélice", + "item.create.flour": "Farinha de Trigo", + "item.create.dough": "Massa", - "block.create.contact": "Redstone Contact", - "block.create.redstone_bridge": "Redstone Link", - "block.create.stockswitch": "Stockpile Switch", + "item.create.blazing_pickaxe": "Picareta Ardente", + "item.create.blazing_shovel": "Pá Ardente", + "item.create.blazing_axe": "Machado Ardente", + "item.create.blazing_sword": "Espada Longa Ardente", + + "item.create.shadow_steel_pickaxe": "Picareta de Aço Sombrio", + "item.create.shadow_steel_mattock": "Enxada de Aço Sombrio", + "item.create.shadow_steel_sword": "Espada de Aço Sombrio", + + "item.create.rose_quartz_pickaxe": "Picareta de Quartzo Dourado", + "item.create.rose_quartz_shovel": "Pá de Quartzo Dourado", + "item.create.rose_quartz_axe": "Machado de Quartzo Dourado", + "item.create.rose_quartz_sword": "Lamina de Quartzo Dourado", + + "block.create.cogwheel": "Roda Dentada", + "block.create.large_cogwheel": "Roda Dentada Grande", + "block.create.turntable": "Mesa giratória", + "block.create.gearbox": "Caixa de Transmissão", + "block.create.gearshift": "Câmbio", + "block.create.clutch": "Embreagem", + "block.create.shaft": "Eixo", + "block.create.encased_belt": "Esteira Revestida", + "block.create.encased_shaft": "Eixo Revestido", + "block.create.encased_fan": "Ventilador Revestida", + "block.create.motor": "Motor", + "block.create.belt": "Esteira Mecânica", + "block.create.crushing_wheel": "Roda de Moer", + "block.create.drill": "Furadeira Mecânica", + "block.create.harvester": "Coletor Mecânico", + "block.create.water_wheel": "Roda de Água", + "block.create.belt_support": "Suporte da Esteira", + "block.create.mechanical_press": "Prensa Mecânico", + + "block.create.sticky_mechanical_piston": "Pistão Mecânico Grudento", + "block.create.mechanical_piston": "Pistão Mecânico", + "block.create.mechanical_piston_head": "Cabeça do Pistão Mecânico", + "block.create.piston_pole": "Vara de Extensão do Pistão", + "block.create.mechanical_bearing": "Rolamento Mecânico", + "block.create.translation_chassis": "Chassis de Translado", + "block.create.rotation_chassis": "Chassis de Rotação", + + "block.create.contact": "Contato de Redstone", + "block.create.redstone_bridge": "Conexão de Redstone", + "block.create.stockswitch": "Disjuntor de Armazenamento", "block.create.flexcrate": "FlexCrate", - "block.create.extractor": "Extractor", - "block.create.belt_funnel": "Belt Funnel", - "block.create.linked_extractor": "Linked Extractor", - "block.create.pulse_repeater": "Pulse Repeater", - "block.create.flexpeater": "FlexPeater", - "block.create.entity_detector": "Belt Observer", - - "block.create.tiled_glass": "Tiled Glass", - "block.create.tiled_glass_pane": "Tiled Glass Pane", - - "block.create.window_in_a_block": "Block with Glass Pane", - "block.create.andesite_bricks": "Andesite Bricks", - "block.create.diorite_bricks": "Diorite Bricks", - "block.create.granite_bricks": "Granite Bricks", - - "block.create.gabbro": "Gabbro", - "block.create.gabbro_stairs": "Gabbro Stairs", - "block.create.gabbro_slab": "Gabbro Slab", - "block.create.gabbro_wall": "Gabbro Wall", - "block.create.polished_gabbro": "Polished Gabbro", - "block.create.gabbro_bricks": "Gabbro Bricks", - "block.create.gabbro_bricks_stairs": "Gabbro Brick Stairs", - "block.create.gabbro_bricks_wall": "Gabbro Brick Wall", - "block.create.paved_gabbro_bricks": "Paved Gabbro Bricks", - "block.create.paved_gabbro_bricks_slab": "Paved Gabbro Bricks Slab", - "block.create.indented_gabbro": "Indented Gabbro Tile", - "block.create.indented_gabbro_slab": "Indented Gabbro Slab", - "block.create.slightly_mossy_gabbro_bricks": "Mossy Gabbro Bricks", - "block.create.mossy_gabbro_bricks": "Overgrown Gabbro Bricks", - - "block.create.weathered_limestone": "Weathered Limestone", - "block.create.weathered_limestone_stairs": "Weathered Limestone Stairs", - "block.create.weathered_limestone_wall": "Weathered Limestone Wall", - "block.create.weathered_limestone_slab": "Weathered Limestone Slab", - "block.create.polished_weathered_limestone": "Polished Weathered Limestone", - "block.create.polished_weathered_limestone_slab": "Polished Weathered Limestone Slab", - "block.create.weathered_limestone_bricks": "Weathered Limestone Bricks", - "block.create.weathered_limestone_bricks_stairs": "Weathered Limestone Brick Stairs", - "block.create.weathered_limestone_bricks_wall": "Weathered Limestone Brick Wall", - "block.create.weathered_limestone_bricks_slab": "Weathered Limestone Brick Slab", - "block.create.weathered_limestone_pillar": "Weathered Limestone Pillar", - - "block.create.dolomite_pillar": "Dolomite Pillar", - "block.create.dolomite": "Dolomite", - "block.create.dolomite_stairs": "Dolomite Stairs", - "block.create.dolomite_wall": "Dolomite Wall", - "block.create.dolomite_slab": "Dolomite Slab", - "block.create.dolomite_bricks": "Dolomite Bricks", - "block.create.dolomite_bricks_wall": "Dolomite Brick Wall", - "block.create.dolomite_bricks_stairs": "Dolomite Brick Stairs", - "block.create.dolomite_bricks_slab": "Dolomite Brick Slab", - "block.create.polished_dolomite": "Polished Dolomite", - - "block.create.limesand": "Limesand", - "block.create.limestone": "Limestone", - "block.create.limestone_stairs": "Limestone Stairs", - "block.create.limestone_slab": "Limestone Slab", - "block.create.limestone_wall": "Limestone Wall", - "block.create.limestone_bricks": "Limestone Bricks", - "block.create.limestone_bricks_stairs": "Limestone Brick Stairs", - "block.create.limestone_bricks_slab": "Limestone Brick Slab", - "block.create.limestone_bricks_wall": "Limestone Brick Wall", - "block.create.polished_limestone": "Polished Limestone", - "block.create.polished_limestone_slab": "Polished Limestone Slab", - "block.create.limestone_pillar": "Limestone Pillar", - - "block.create.schematicannon": "Schematicannon", - "block.create.schematic_table": "Schematic Table", - "block.create.creative_crate": "Schematicannon Creatifier", + "block.create.extractor": "Extrator", + "block.create.belt_funnel": "Funil de Esteira", + "block.create.linked_extractor": "Extrator Conectado", + "block.create.pulse_repeater": "Repetidor de Pulso", + "block.create.flexpeater": "Repetidor Flex", + "block.create.entity_detector": "Observador de Esteira", + + "block.create.tiled_glass": "Vidro Entalhado", + "block.create.tiled_glass_pane": "Vidraça Entalhada", + + "block.create.window_in_a_block": "Bloco com Vidraça", + "block.create.andesite_bricks": "Tijolos de Andesite", + "block.create.diorite_bricks": "Tijolos de Diorito", + "block.create.granite_bricks": "Tijolos de Granito", + + "block.create.gabbro": "Gabbro", + "block.create.gabbro_stairs": "Escadas de Gabbro", + "block.create.gabbro_slab": "Lajotas de Gabbro", + "block.create.gabbro_wall": "Muro de Gabbro", + "block.create.polished_gabbro": "Gabbro Polido", + "block.create.gabbro_bricks": "Tijolos de Gabbro", + "block.create.gabbro_bricks_stairs": "Escadas de Tijolos de Gabbro", + "block.create.gabbro_bricks_wall": "Muros de Tijolos de Gabbro", + "block.create.paved_gabbro_bricks": "Tijolos de Gabbros Pavimentados", + "block.create.paved_gabbro_bricks_slab": "Lajotas de Tijolos de Gabbros Pavimentados", + "block.create.indented_gabbro": "Ladrilho Destacado de Gabbro", + "block.create.indented_gabbro_slab": "Lajota Destacada de Gabbro", + "block.create.slightly_mossy_gabbro_bricks": "Tijolos de Gabbros Musgosos", + "block.create.mossy_gabbro_bricks": "Tijolos de Gabbros Musgosos Infestados", + + "block.create.weathered_limestone": "Calcário Resistido", + "block.create.weathered_limestone_stairs": "Escadas de Calcário Resistido", + "block.create.weathered_limestone_wall": " Muro de Calcário Resistido", + "block.create.weathered_limestone_slab": "Lajota de Calcário Resistido", + "block.create.polished_weathered_limestone": "Calcário Polido Resistido", + "block.create.polished_weathered_limestone_slab": "Lajota de Calcário Polido Resistido", + "block.create.weathered_limestone_bricks": "Tijolos de Calcário Resistido", + "block.create.weathered_limestone_bricks_stairs": "Escadas de Tijolos de Calcário Resistido", + "block.create.weathered_limestone_bricks_wall": "Muro de Tijolos de Calcário Resistido", + "block.create.weathered_limestone_bricks_slab": "Lajota de Tijolos de Calcário Resistido", + "block.create.weathered_limestone_pillar": "Pilar de Calcário Resistido", + + "block.create.dolomite_pillar": "Pilar de Dolomite", + "block.create.dolomite": "Dolomite", + "block.create.dolomite_stairs": "Escadas de Dolomite", + "block.create.dolomite_wall": "Muro de Dolomite", + "block.create.dolomite_slab": "Lajota de Dolomite", + "block.create.dolomite_bricks": "Tijolos de Dolomite", + "block.create.dolomite_bricks_wall": "Muro de Tijolos de Dolomite", + "block.create.dolomite_bricks_stairs": "Escadas de Tijolos de Dolomite", + "block.create.dolomite_bricks_slab": "Lajotas de Tijolos de Dolomite", + "block.create.polished_dolomite": "Dolomite Polido", + + "block.create.limesand": "Areia Calcária", + "block.create.limestone": "Calcário", + "block.create.limestone_stairs": "Escadas de Calcário", + "block.create.limestone_slab": "Lajotas de Calcário", + "block.create.limestone_wall": "Muro de Calcário", + "block.create.limestone_bricks": "Tijolos de Calcário", + "block.create.limestone_bricks_stairs": "Escadas de Tijolos de Calcário", + "block.create.limestone_bricks_slab": "Lajotas de Tijolos de Calcário", + "block.create.limestone_bricks_wall": "Muro de Tijolos de Calcário", + "block.create.polished_limestone": "Calcário Polido", + "block.create.polished_limestone_slab": "Lajotas de Calcário Polido", + "block.create.limestone_pillar": "Pilar de Calcário", + + "block.create.schematicannon": "Esquemaannon", + "block.create.schematic_table": "Mesa de Esquematizar", + "block.create.creative_crate": "Criativador Esquemaannon", + + "block.create.cocoa_log": "Madeira de Cacao da Selva", + + "block.create.shop_shelf": "Prateleira", - "block.create.cocoa_log": "Cocoa Jungle Log", - - "block.create.shop_shelf": "Shelf", - "_comment": "-------------------------] UI & MESSAGES [------------------------------------------------", - "death.attack.create.crush": "%1$s was processed by Crushing Wheels", - "death.attack.create.fan_fire": "%1$s was burned to death by hot air", - "death.attack.create.fan_lava": "%1$s was burned to death by lava fan", - "death.attack.create.drill": "%1$s was impaled by Mechanical Drill", - - "create.recipe.crushing": "Crushing", - "create.recipe.splashing": "Bulk Washing", - "create.recipe.splashing.fan": "Fan behind Flowing Water", - "create.recipe.smokingViaFan": "Bulk Smoking", - "create.recipe.smokingViaFan.fan": "Fan behind Fire", - "create.recipe.blastingViaFan": "Bulk Smelting", - "create.recipe.blastingViaFan.fan": "Fan behind Lava", - "create.recipe.pressing": "Mechanical Press", - "create.recipe.blockzapperUpgrade": "Handheld Blockzapper", - "create.recipe.processing.chance": "%1$s%% Chance", - - "create.generic.range": "Range", - "create.generic.radius": "Radius", - "create.generic.speed": "Speed", - "create.generic.delay": "Delay", + "death.attack.create.crush": "%1$s foi processado pelas Rodas de Moer", + "death.attack.create.fan_fire": "%1$s foi queimado por ar quente", + "death.attack.create.fan_lava": "%1$s foi queimado pelo ventilador de lava", + "death.attack.create.drill": "%1$s foi empalado pela Furadeira Mecânica", + + "create.recipe.crushing": "Moendo", + "create.recipe.splashing": "Lavando em Massa", + "create.recipe.splashing.fan": "Ventilador atras de Água corrente", + "create.recipe.smokingViaFan": "Fumaceando em Massa", + "create.recipe.smokingViaFan.fan": "Ventilador atras de Fogo", + "create.recipe.blastingViaFan": "Fundindo em Massa", + "create.recipe.blastingViaFan.fan": "Ventilador atras de Lava", + "create.recipe.pressing": "Prensa Mecânica", + "create.recipe.blockzapperUpgrade": "Blockzapper Portátil", + "create.recipe.processing.chance": "%1$s%% de chance", + + "create.generic.range": "Área", + "create.generic.radius": "Raio", + "create.generic.speed": "Velocidade", + "create.generic.delay": "Demorada", "create.generic.unit.ticks": "Ticks", - "create.generic.unit.seconds": "Seconds", - "create.generic.unit.minutes": "Minutes", - - "create.action.scroll": "Scroll", - "create.action.confirm": "Confirm", - "create.action.abort": "Abort", - "create.action.saveToFile": "Save", - "create.action.discard": "Discard", - - "create.keyinfo.toolmenu": "Focus Tool Menu", - - "create.gui.scrollInput.defaultTitle": "Choose an Option:", - "create.gui.scrollInput.scrollToModify": "Scroll to Modify", - "create.gui.scrollInput.scrollToSelect": "Scroll to Select", - "create.gui.scrollInput.shiftScrollsFaster": "Shift to Scroll faster", - - "create.gui.toolmenu.focusKey": "Hold [%1$s] to Focus", - "create.gui.toolmenu.cycle": "[SCROLL] to Cycle", - - "create.gui.symmetryWand.mirrorType": "Mirror", - "create.gui.symmetryWand.orientation": "Orientation", - "create.symmetry.mirror.plane": "Mirror once", - "create.symmetry.mirror.doublePlane": "Rectangular", + "create.generic.unit.seconds": "Segundos", + "create.generic.unit.minutes": "Minutos", + + "create.action.scroll": "Rolar", + "create.action.confirm": "Confirmar", + "create.action.abort": "Abortar", + "create.action.saveToFile": "Salvar", + "create.action.discard": "Descartar", + + "create.keyinfo.toolmenu": "Menu Focal da Ferramenta", + + "create.gui.scrollInput.defaultTitle": "Escolha uma Opção:", + "create.gui.scrollInput.scrollToModify": "Role o mouse para Modificar", + "create.gui.scrollInput.scrollToSelect": "Role o mouse para Selecionar", + "create.gui.scrollInput.shiftRolarsFaster": "Shift para rolar mais rápido", + + "create.gui.toolmenu.focusKey": "Segure [%1$s] para Focar", + "create.gui.toolmenu.cycle": "[SCROLL] para Circular", + + "create.gui.symmetryWand.mirrorType": "Espelhar", + "create.gui.symmetryWand.orientation": "Orientação", + "create.symmetry.mirror.plane": "Espelhar uma vez", + "create.symmetry.mirror.doublePlane": "Retangular", "create.symmetry.mirror.triplePlane": "Octagonal", - "create.orientation.orthogonal": "Orthogonal", + "create.orientation.orthogonal": "Ortogonal", "create.orientation.diagonal": "Diagonal", "create.orientation.horizontal": "Horizontal", - "create.orientation.alongZ": "Along Z", - "create.orientation.alongX": "Along X", - - "create.gui.blockzapper.title": "Handheld Blockzapper", - "create.gui.blockzapper.replaceMode": "Replace Mode", - "create.gui.blockzapper.searchDiagonal": "Follow Diagonals", - "create.gui.blockzapper.searchFuzzy": "Ignore Material Borders", - "create.gui.blockzapper.range": "Spread Range", - "create.gui.blockzapper.patternSection": "Patterns", - "create.gui.blockzapper.pattern.solid": "Solid", - "create.gui.blockzapper.pattern.checkered": "Checkerboard", - "create.gui.blockzapper.pattern.inversecheckered": "Inversed Checkerboard", - "create.gui.blockzapper.pattern.chance25": "25% Roll", - "create.gui.blockzapper.pattern.chance50": "50% Roll", - "create.gui.blockzapper.pattern.chance75": "75% Roll", - - "create.blockzapper.usingBlock": "Using: %1$s", - "create.blockzapper.componentUpgrades": "Component Upgrades:", - "create.blockzapper.component.body": "Body", - "create.blockzapper.component.amplifier": "Amplifier", - "create.blockzapper.component.accelerator": "Accelerator", - "create.blockzapper.component.retriever": "Retriever", - "create.blockzapper.component.scope": "Scope", - "create.blockzapper.componentTier.none": "None", - "create.blockzapper.componentTier.blazebrass": "Blaze Brass", - "create.blockzapper.componentTier.choruschrome": "Chorus Chrome", - "create.blockzapper.leftClickToSet": "Left-Click a Block to set Material", - "create.blockzapper.empty": "Out of Blocks!", - - "create.logistics.filter": "Filter", - "create.logistics.firstFrequency": "Freq. #1", - "create.logistics.secondFrequency": "Freq. #2", - + "create.orientation.alongZ": "Através de Z", + "create.orientation.alongX": "Através de X", + + "create.gui.blockzapper.title": "Blockzapper Portátil", + "create.gui.blockzapper.replaceMode": "Modo de Substituição", + "create.gui.blockzapper.searchDiagonal": "Seguir as Diagonais", + "create.gui.blockzapper.searchFuzzy": "Ignorar Material nas Bordas", + "create.gui.blockzapper.range": "Raio de Expansão", + "create.gui.blockzapper.patternSection": "Padrões", + "create.gui.blockzapper.pattern.solid": "Sólido", + "create.gui.blockzapper.pattern.checkered": "Xadrez", + "create.gui.blockzapper.pattern.inversecheckered": "Xadrez invertido", + "create.gui.blockzapper.pattern.chance25": "25% de chance", + "create.gui.blockzapper.pattern.chance50": "50% de chance", + "create.gui.blockzapper.pattern.chance75": "75% de chance", + + "create.blockzapper.usingBlock": "Usando: %1$s", + "create.blockzapper.componentUpgrades": "Melhorias do Componente:", + "create.blockzapper.component.body": "Corpo", + "create.blockzapper.component.amplifier": "Amplificador", + "create.blockzapper.component.accelerator": "Acelerador", + "create.blockzapper.component.retriever": "Retornador", + "create.blockzapper.component.scope": "Mira", + "create.blockzapper.componentTier.none": "Nada", + "create.blockzapper.componentTier.blazebrass": "Latão de Blaze", + "create.blockzapper.componentTier.choruschrome": "Coro Cromado", + "create.blockzapper.leftClickToSet": "Botão-Esquerdo em um Bloco para selecionar Material", + "create.blockzapper.empty": "Sem Blocos!", + + "create.logistics.filter": "Filtros", + "create.logistics.firstFrequência": "Freq. #1", + "create.logistics.secondFrequência": "Freq. #2", + "create.gui.flexcrate.title": "FlexCrate", - "create.gui.flexcrate.storageSpace": "Storage Space", - - "create.gui.stockswitch.title": "Stockpile Switch", - "create.gui.stockswitch.lowerLimit": "Lower Threshold", - "create.gui.stockswitch.upperLimit": "Upper Threshold", - "create.gui.stockswitch.startAt": "Start Signal at", - "create.gui.stockswitch.startAbove": "Start Signal above", - "create.gui.stockswitch.stopAt": "Stop Signal at", - "create.gui.stockswitch.stopBelow": "Stop Signal below", - - "create.schematicAndQuill.dimensions": "Schematic Size: %1$sx%2$sx%3$s", - "create.schematicAndQuill.firstPos": "First position set.", - "create.schematicAndQuill.secondPos": "Second position set.", - "create.schematicAndQuill.noTarget": "Hold [Ctrl] to select Air blocks.", - "create.schematicAndQuill.abort": "Removed selection.", - "create.schematicAndQuill.prompt": "Enter a name for the Schematic:", - "create.schematicAndQuill.fallbackName": "My Schematic", - "create.schematicAndQuill.saved": "Saved as %1$s", - - "create.schematic.invalid": "[!] Invalid Item - Use the Schematic Table instead", - "create.schematic.position": "Position", - "create.schematic.rotation": "Rotation", - "create.schematic.rotation.none": "None", - "create.schematic.rotation.cw90": "Clockwise 90", - "create.schematic.rotation.cw180": "Clockwise 180", - "create.schematic.rotation.cw270": "Clockwise 270", - "create.schematic.mirror": "Mirror", - "create.schematic.mirror.none": "None", - "create.schematic.mirror.frontBack": "Front-Back", - "create.schematic.mirror.leftRight": "Left-Right", - - "create.schematic.tool.deploy": "Deploy", - "create.schematic.tool.move": "Move XZ", - "create.schematic.tool.movey": "Move Y", - "create.schematic.tool.rotate": "Rotate", - "create.schematic.tool.print": "Print", - "create.schematic.tool.flip": "Flip", - - "create.schematic.tool.deploy.description.0": "Moves the structure to a location.", - "create.schematic.tool.deploy.description.1": "Right-Click on the ground to place.", - "create.schematic.tool.deploy.description.2": "Hold [Ctrl] to select at a fixed distance.", - "create.schematic.tool.deploy.description.3": "[Ctrl]-Scroll to change the distance.", - "create.schematic.tool.move.description.0": "Shifts the Schematic Horizontally", - "create.schematic.tool.move.description.1": "Point at the Schematic and [CTRL]-Scroll to push it.", + "create.gui.flexcrate.storageSpace": "Espaço de Armazenamento", + + "create.gui.stockswitch.title": "Disjuntor de Armazenamento", + "create.gui.stockswitch.lowerLimit": "Limite Mínimo", + "create.gui.stockswitch.upperLimit": "Limite Máximo", + "create.gui.stockswitch.startAt": "Iniciar Sinal em", + "create.gui.stockswitch.startAbove": "Iniciar Sinal acima de", + "create.gui.stockswitch.stopAt": "Parar Sinal em", + "create.gui.stockswitch.stopBelow": "Parar Sinal abaixo de", + + "create.schematicAndQuill.dimensions": "Tamanho Esquema: %1$sx%2$sx%3$s", + "create.schematicAndQuill.firstPos": "Primeira posição feita.", + "create.schematicAndQuill.secondPos": "Segunda posição feita.", + "create.schematicAndQuill.noTarget": "Seguro [Ctrl] para selecionar Blocos de Ar.", + "create.schematicAndQuill.abort": "Seleção removida.", + "create.schematicAndQuill.prompt": "Informe um nome para o Esquema:", + "create.schematicAndQuill.fallbackName": "Meu Esquema", + "create.schematicAndQuill.saved": "Salvo como %1$s", + + "create.schematic.invalid": "[!] Item Inválido - Use a Mesa de Desenho no lugar", + "create.schematic.position": "Posição", + "create.schematic.rotation": "Rotação", + "create.schematic.rotation.none": "Nada", + "create.schematic.rotation.cw90": "Sentido horário 90", + "create.schematic.rotation.cw180": "Sentido horário 180", + "create.schematic.rotation.cw270": "Sentido horário 270", + "create.schematic.mirror": "Espelhar", + "create.schematic.mirror.none": "Nada", + "create.schematic.mirror.frontBack": "Frente para Trás", + "create.schematic.mirror.leftRight": "Esquerda para Direita", + + "create.schematic.tool.deploy": "Concluir", + "create.schematic.tool.move": "Mover XZ", + "create.schematic.tool.movey": "Mover Y", + "create.schematic.tool.rotate": "Rodar", + "create.schematic.tool.print": "Imprimir", + "create.schematic.tool.flip": "Virar", + + "create.schematic.tool.deploy.description.0": "Move o lugar da estrutura.", + "create.schematic.tool.deploy.description.1": "Botão-direito no chão para colocar.", + "create.schematic.tool.deploy.description.2": "Segure [Ctrl] para selecionar em uma distância fixa.", + "create.schematic.tool.deploy.description.3": "[Ctrl]-Rolar para mudar a distância.", + "create.schematic.tool.move.description.0": "Vira o Esquema Horizontalmente", + "create.schematic.tool.move.description.1": "Aponte ao Esquema e [CTRL]-Rolar para empurrar.", "create.schematic.tool.move.description.2": "", "create.schematic.tool.move.description.3": "", - "create.schematic.tool.movey.description.0": "Shifts the Schematic Vertically", - "create.schematic.tool.movey.description.1": "[CTRL]-Scroll to move it up/down", + "create.schematic.tool.movey.description.0": "Vira o Esquema Verticalmente", + "create.schematic.tool.movey.description.1": "[CTRL]-Rolar para mover para cima/baixo", "create.schematic.tool.movey.description.2": "", "create.schematic.tool.movey.description.3": "", - "create.schematic.tool.rotate.description.0": "Rotates the Schematic around its center.", - "create.schematic.tool.rotate.description.1": "[CTRL]-Scroll to rotate by 90 Degrees", + "create.schematic.tool.rotate.description.0": "Roda o Esquema em torno do seu centro.", + "create.schematic.tool.rotate.description.1": "[CTRL]-Rolar para rolar 90 Graus", "create.schematic.tool.rotate.description.2": "", "create.schematic.tool.rotate.description.3": "", - "create.schematic.tool.print.description.0": "Instantly places the structure in the world", - "create.schematic.tool.print.description.1": "[Right-Click] to confirm placement at the current location.", - "create.schematic.tool.print.description.2": "This tool is for Creative Mode only.", + "create.schematic.tool.print.description.0": "Coloca estrutura no mundo instantaneamente", + "create.schematic.tool.print.description.1": "[Botão-Direito] para confirmar a posição atual.", + "create.schematic.tool.print.description.2": "Esta ferramenta é para o Modo Criativo apenas.", "create.schematic.tool.print.description.3": "", - "create.schematic.tool.flip.description.0": "Flips the Schematic along the face you select.", - "create.schematic.tool.flip.description.1": "Point at the Schematic and [CTRL]-Scroll to flip it.", + "create.schematic.tool.flip.description.0": "Gira o Esquema ao longo da face que você selecionar.", + "create.schematic.tool.flip.description.1": "Aponte para o Esquema e [CTRL]-Rolar para virá-lo.", "create.schematic.tool.flip.description.2": "", "create.schematic.tool.flip.description.3": "", - - "create.schematics.synchronizing": "Syncing...", - "create.schematics.uploadTooLarge": "Your schematic is too large", - "create.schematics.maxAllowedSize": "The maximum allowed schematic file size is:", - - "create.gui.schematicTable.title": "Schematic Table", - "create.gui.schematicTable.availableSchematics": "Available Schematics", - "create.gui.schematicTable.noSchematics": "No Schematics Saved", - "create.gui.schematicTable.uploading": "Uploading...", - "create.gui.schematicTable.finished": "Upload Finished!", - - "create.gui.schematicannon.title": "Schematicannon", - "create.gui.schematicannon.settingsTitle": "Placement Settings", - "create.gui.schematicannon.listPrinter": "Material List Printer", - "create.gui.schematicannon.gunpowderLevel": "Gunpowder at %1$s%%", - "create.gui.schematicannon.shotsRemaining": "Shots left: %1$s", - "create.gui.schematicannon.shotsRemainingWithBackup": "With backup: %1$s", - "create.gui.schematicannon.optionEnabled": "Currently Enabled", - "create.gui.schematicannon.optionDisabled": "Currently Disabled", - "create.gui.schematicannon.option.dontReplaceSolid": "Don't Replace Solid Blocks", - "create.gui.schematicannon.option.replaceWithSolid": "Replace Solid with Solid", - "create.gui.schematicannon.option.replaceWithAny": "Replace Solid with Any", - "create.gui.schematicannon.option.replaceWithEmpty": "Replace Solid with Empty", - "create.gui.schematicannon.option.skipMissing": "Skip missing Blocks", - "create.gui.schematicannon.option.skipTileEntities": "Protect Tile Entities", - - "create.gui.schematicannon.option.skipMissing.description": "If the Schematicannon cannot find a required Block for placement, it will continue at the next Location.", - "create.gui.schematicannon.option.skipTileEntities.description": "The Schematicannon will avoid replacing data holding blocks such as Chests.", - "create.gui.schematicannon.option.dontReplaceSolid.description": "The cannon will never replace any Solid blocks in its working area, only non-Solid and Air.", - "create.gui.schematicannon.option.replaceWithSolid.description": "The cannon will only replace Solid blocks in its working area, if the Schematic contains a solid Block at their location.", - "create.gui.schematicannon.option.replaceWithAny.description": "The cannon will replace Solid blocks in its working area, if the Schematic contains any Block at their location.", - "create.gui.schematicannon.option.replaceWithEmpty.description": "The cannon will clear out all blocks in its working area, including those replaced by Air.", - - "create.schematicannon.status.idle": "Idle", - "create.schematicannon.status.ready": "Ready", - "create.schematicannon.status.running": "Running", - "create.schematicannon.status.finished": "Finished", - "create.schematicannon.status.paused": "Paused", - "create.schematicannon.status.stopped": "Stopped", - "create.schematicannon.status.noGunpowder": "Out of Gunpowder", - "create.schematicannon.status.targetNotLoaded": "Block is not loaded", - "create.schematicannon.status.targetOutsideRange": "Target too Far Away", - "create.schematicannon.status.searching": "Searching", - "create.schematicannon.status.skipping": "Skipping", - "create.schematicannon.status.missingBlock": "Missing Block:", - "create.schematicannon.status.placing": "Placing", - "create.schematicannon.status.clearing": "Clearing Blocks", - "create.schematicannon.status.schematicInvalid": "Schematic Invalid", - "create.schematicannon.status.schematicNotPlaced": "Schematic not Deployed", - "create.schematicannon.status.schematicExpired": "Schematic File Expired", - - "create.tooltip.holdKey": "Hold [%1$s]", - "create.tooltip.holdKeyOrKey": "Hold [%1$s] or [%2$s]", + + "create.schematics.synchronizing": "Sincronizando...", + "create.schematics.uploadTooLarge": "Seu esquema é muito grande", + "create.schematics.maxAllowedSize": "O tamanho máximo permitido para o esquema é:", + + "create.gui.schematicTable.title": "Mesa de Desenho", + "create.gui.schematicTable.availableEsquemas": "Esquemas Disponíveis", + "create.gui.schematicTable.noEsquemas": "Nenhum Esquemas salvo", + "create.gui.schematicTable.uploading": "Importando...", + "create.gui.schematicTable.finished": "Envio Concluído!", + + "create.gui.schematicannon.title": "Esquemaannon", + "create.gui.schematicannon.settingsTitle": "Parâmetros de Posicionamento", + "create.gui.schematicannon.listPrinter": "Impressora de Lista de Materiais", + "create.gui.schematicannon.gunpowderLevel": "Pólvora em %1$s%%", + "create.gui.schematicannon.shotsRemaining": "Disparos faltantes: %1$s", + "create.gui.schematicannon.shotsRemainingWithBackup": "Com backup: %1$s", + "create.gui.schematicannon.optionEnabled": "Habilitado Atualmente", + "create.gui.schematicannon.optionDisabled": "Desabilitado Atualmente", + "create.gui.schematicannon.option.dontReplaceSolid": "Não Substituir Blocos Sólidos", + "create.gui.schematicannon.option.replaceWithSolid": "Substituir Blocos Sólidos", + "create.gui.schematicannon.option.replaceWithAny": "Substituir Sólidos com Qualquer", + "create.gui.schematicannon.option.replaceWithEmpty": "Substituir Sólidos com Vazio", + "create.gui.schematicannon.option.skipMissing": "Pulando Blocos faltantes", + "create.gui.schematicannon.option.skipTileEntities": "Proteger Entidades Entalhadas", + + "create.gui.schematicannon.option.skipMissing.description": "Se o Esquemaannon não encontrar o Bloco para colocar, ele irá continuar para a próx. Posição.", + "create.gui.schematicannon.option.skipTileEntities.description": "O Esquemaannon vai evitar substituir blocos que contêm dados como Baus.", + "create.gui.schematicannon.option.dontReplaceSolid.description": "O canhão irá nunca substituir Blocos sólidos na área em trabalho, apenas não-Sólidos e Ar.", + "create.gui.schematicannon.option.replaceWithSolid.description": "O canhão irá apenas substituir Blocos sólidos na área de trabalho, se o Esquema conter um bloco Sólido naquela posição.", + "create.gui.schematicannon.option.replaceWithAny.description": "O canhão irá substituir Blocos sólidos na área de trabalho, se o Esquema conter qualquer Bloco naquela posição.", + "create.gui.schematicannon.option.replaceWithEmpty.description": "O canhão irá limpar todos os blocos na área de trabalho, incluindo os substituídos por Ar.", + + "create.schematicannon.status.idle": "Ocioso", + "create.schematicannon.status.ready": "Pronto", + "create.schematicannon.status.running": "Trabalhando", + "create.schematicannon.status.finished": "Concluído", + "create.schematicannon.status.paused": "Pausado", + "create.schematicannon.status.stopped": "Parada", + "create.schematicannon.status.noPólvora": "Sem Pólvora", + "create.schematicannon.status.targetNotLoaded": "Bloco não carregado", + "create.schematicannon.status.targetOutsideRange": "Alvo está muito Longe", + "create.schematicannon.status.searching": "Procurando", + "create.schematicannon.status.skipping": "Pulando", + "create.schematicannon.status.missingBlock": "Bloco Faltante:", + "create.schematicannon.status.placing": "Colocando", + "create.schematicannon.status.clearing": "Limpando Blocos", + "create.schematicannon.status.schematicInvalid": "Esquema Inválido", + "create.schematicannon.status.schematicNotPlaced": "Esquema não Colocado", + "create.schematicannon.status.schematicExpired": "Arquivo de Esquema Expirado", + + "create.tooltip.holdKey": "Segure [%1$s]", + "create.tooltip.holdKeyOrKey": "Segure [%1$s] or [%2$s]", "create.tooltip.keyShift": "Shift", "create.tooltip.keyCtrl": "Ctrl", - + "_comment": "-------------------------] ITEM DESCRIPTIONS [------------------------------------------------", - + "item.create.example_item.tooltip": "EXAMPLE ITEM (just a marker that this tooltip exists)", "item.create.example_item.tooltip.summary": "A brief description of the item. _Underscores_ highlight a term.", - "item.create.example_item.tooltip.condition1": "When this", + "item.create.example_item.tooltip.condition1": "Quando this", "item.create.example_item.tooltip.behaviour1": "Then this item does this. (behaviours show on shift)", - "item.create.example_item.tooltip.condition2": "And When this", + "item.create.example_item.tooltip.condition2": "And Quando this", "item.create.example_item.tooltip.behaviour2": "You can add as many behaviours as you like", - "item.create.example_item.tooltip.control1": "When Ctrl pressed", - "item.create.example_item.tooltip.action1": "These controls are displayed.", - - "item.create.symmetry_wand.tooltip": "SYMMETRY WAND", - "item.create.symmetry_wand.tooltip.summary": "Perfectly mirrors your Block placement across the configured planes.", - "item.create.symmetry_wand.tooltip.condition1": "When in Hotbar", - "item.create.symmetry_wand.tooltip.behaviour1": "Stays Active", - "item.create.symmetry_wand.tooltip.control1": "R-Click on Ground", - "item.create.symmetry_wand.tooltip.action1": "_Creates_ or _Moves_ the Mirror", - "item.create.symmetry_wand.tooltip.control2": "R-Click in the Air", - "item.create.symmetry_wand.tooltip.action2": "_Removes_ the active Mirror", - "item.create.symmetry_wand.tooltip.control3": "R-Click while Sneaking", - "item.create.symmetry_wand.tooltip.action3": "Opens the _Configuration_ _Interface_", - + "item.create.example_item.tooltip.control1": "Quando Ctrl pressed", + "item.create.example_item.tooltip.action1": "These controls are displayed.", + + "item.create.symmetry_wand.tooltip": "VARINHA DE SIMETRIA", + "item.create.symmetry_wand.tooltip.summary": "Espelhar perfeitamente a colocação de blocos nos planos configurados.", + "item.create.symmetry_wand.tooltip.condition1": "Quando na Hotbar", + "item.create.symmetry_wand.tooltip.behaviour1": "Mantem-se Ativo", + "item.create.symmetry_wand.tooltip.control1": "B-Direito no Chão", + "item.create.symmetry_wand.tooltip.action1": "_Cria_ ou _Move_ o Espelho", + "item.create.symmetry_wand.tooltip.control2": "B-Direito no Ar", + "item.create.symmetry_wand.tooltip.action2": "_Remove_ o Espelho ativo", + "item.create.symmetry_wand.tooltip.control3": "B-Direito enquanto Abaixado", + "item.create.symmetry_wand.tooltip.action3": "Abre _Interface_ de _Configuração_", + "item.create.placement_handgun.tooltip": "BLOCKZAPPER", - "item.create.placement_handgun.tooltip.summary": "Novel gadget for placing or exchanging blocks at a distance.", - "item.create.placement_handgun.tooltip.control1": "L-Click at Block", - "item.create.placement_handgun.tooltip.action1": "Sets blocks placed by the tool to the targeted block.", - "item.create.placement_handgun.tooltip.control2": "R-Click at Block", - "item.create.placement_handgun.tooltip.action2": "_Places_ or _Replaces_ the targeted block.", - "item.create.placement_handgun.tooltip.control3": "R-Click while Sneaking", - "item.create.placement_handgun.tooltip.action3": "Opens the _Configuration_ _Interface_", - - "item.create.tree_fertilizer.tooltip": "TREE FERTILIZER", - "item.create.tree_fertilizer.tooltip.summary": "A powerful combination of minerals suitable for common tree types", - "item.create.tree_fertilizer.tooltip.condition1": "When used on Sapling", - "item.create.tree_fertilizer.tooltip.behaviour1": "Grows Trees regardless of their spacing Conditions", - - "block.create.cocoa_log.tooltip": "COCOA LOG", - "block.create.cocoa_log.tooltip.summary": "An augmented jungle log allowing for easier automation of _Cocoa_ _Beans_", - "block.create.cocoa_log.tooltip.condition1": "When Mature", - "block.create.cocoa_log.tooltip.behaviour1": "Grows _Cocoa_ _Pods_ on all sides", - - "item.create.empty_blueprint.tooltip": "EMPTY SCHEMATIC", - "item.create.empty_blueprint.tooltip.summary": "Used as a recipe ingredient and for writing at the _Schematic_ _Table_", - - "item.create.blueprint.tooltip": "SCHEMATIC", - "item.create.blueprint.tooltip.summary": "Holds a structure to be positioned and placed into the world. Position the Hologram as desired and use a _Schematicannon_ to build it.", - "item.create.blueprint.tooltip.condition1": "When Held", - "item.create.blueprint.tooltip.behaviour1": "Can be positioned using the Tools on Screen", - "item.create.blueprint.tooltip.control1": "R-Click while Sneaking", - "item.create.blueprint.tooltip.action1": "Opens an _Interface_ for entering exact _Coordinates._", - - "item.create.blueprint_and_quill.tooltip": "SCHEMATIC AND QUILL", - "item.create.blueprint_and_quill.tooltip.summary": "Used for saving a Structure in your world to a .nbt file.", - "item.create.blueprint_and_quill.tooltip.condition1": "Step 1", - "item.create.blueprint_and_quill.tooltip.behaviour1": "Select two corner points using R-Click", - "item.create.blueprint_and_quill.tooltip.condition2": "Step 2", - "item.create.blueprint_and_quill.tooltip.behaviour2": "_Ctrl-Scroll_ on the faces to adjust the size. R-Click again to Save.", - "item.create.blueprint_and_quill.tooltip.control1": "R-Click", - "item.create.blueprint_and_quill.tooltip.action1": "Select a corner point / confirm save", - "item.create.blueprint_and_quill.tooltip.control2": "Ctrl Held", - "item.create.blueprint_and_quill.tooltip.action2": "Select points in _mid-air_. _Scroll_ to adjust the distance.", - "item.create.blueprint_and_quill.tooltip.control3": "R-Click while Sneaking", - "item.create.blueprint_and_quill.tooltip.action3": "_Resets_ and removes the selection.", - - "block.create.creative_crate.tooltip": "CREATIVE CRATE", - "block.create.creative_crate.tooltip.summary": "Provides an endless supply of blocks to adjacent _Schematicannons_", - - "block.create.schematicannon.tooltip": "SCHEMATICANNON", - "block.create.schematicannon.tooltip.summary": "Shoots blocks to recreate a deployed _Schematic_ in the World. Uses items from adjacent Inventories and _Gunpowder_ as fuel.", - "block.create.schematicannon.tooltip.control1": "When R-Clicked", - "block.create.schematicannon.tooltip.action1": "Opens the _Interface_", - - "block.create.schematic_table.tooltip": "SCHEMATIC TABLE", - "block.create.schematic_table.tooltip.summary": "Writes saved Schematics onto an _Empty_ _Schematic_", - "block.create.schematic_table.tooltip.condition1": "When given an Empty Schematic", - "block.create.schematic_table.tooltip.behaviour1": "Uploads a chosen File from your Schematics Folder", - - "block.create.shaft.tooltip": "SHAFT", - "block.create.shaft.tooltip.summary": "_Relays_ _Rotation_ in a straight line.", - - "block.create.cogwheel.tooltip": "COGWHEEL", - "block.create.cogwheel.tooltip.summary": "_Relays_ _Rotation_ in a straigt line, and to adjacent _Cogwheels._", + "item.create.placement_handgun.tooltip.summary": "Gadget imaginário para colocar ou substituir blocos a distância.", + "item.create.placement_handgun.tooltip.control1": "B-Esquerdo no Bloco", + "item.create.placement_handgun.tooltip.action1": "Define os blocos colocados pela ferramenta no bloco de destino.", + "item.create.placement_handgun.tooltip.control2": "B-Direito em Bloco", + "item.create.placement_handgun.tooltip.action2": "_Coloca_ ou _Substitui_ o bloco alvo.", + "item.create.placement_handgun.tooltip.control3": "B-Direito equando Abaixado", + "item.create.placement_handgun.tooltip.action3": "Abre _Interface_ de _Configuração_", - "block.create.large_cogwheel.tooltip": "LARGE COGWHEEL", - "block.create.large_cogwheel.tooltip.summary": "A larger version of the _Cogwheel,_ allowing for _change_ in _Rotation_ _Speed_ when connected to its smaller Counterpart.", - - "block.create.encased_shaft.tooltip": "ENCASED SHAFT", - "block.create.encased_shaft.tooltip.summary": "_Relays_ _Rotation_ in a straight line. Suitable for propagating Rotation through Walls.", + "item.create.tree_fertilizer.tooltip": "FERTILIZANTE DE ARVORE", + "item.create.tree_fertilizer.tooltip.summary": "Uma combinação poderosa de minerais para tipos comuns de arvores", + "item.create.tree_fertilizer.tooltip.condition1": "Quando usada em Mudas", + "item.create.tree_fertilizer.tooltip.behaviour1": "Cresce Arvores independentemente das suas Regras de espaço", + + "block.create.cocoa_log.tooltip": "MADEIRA DE COCOA", + "block.create.cocoa_log.tooltip.summary": "Um tronco de selva melhorado para facilitar automação de _Sementes_ _de_ _Cacau_", + "block.create.cocoa_log.tooltip.condition1": "Quando madura", + "block.create.cocoa_log.tooltip.behaviour1": "Cresce _Vagens_ _de_ _Cacau_ em todos os lados", + + "item.create.empty_blueprint.tooltip": "ESQUEMA VAZIO", + "item.create.empty_blueprint.tooltip.summary": "Usado como ingrediente em receitas e para escrever na _Mesa_ _de_ _Esquematizar_", + + "item.create.blueprint.tooltip": "ESQUEMA", + "item.create.blueprint.tooltip.summary": "Contem uma estrutura para ser posicionada e colocada no mundo. Posicione o Holograma como desejar e use um _Esquemaannon_ para construí-lo.", + "item.create.blueprint.tooltip.condition1": "Quando Em mãos", + "item.create.blueprint.tooltip.behaviour1": "Pode ser posicionado usando as Ferramentas em Tela", + "item.create.blueprint.tooltip.control1": "B-Direito enquanto Abaixado", + "item.create.blueprint.tooltip.action1": "Abre uma _Interface_ para informar as _Coordenadas_ exatas.", + + "item.create.blueprint_and_quill.tooltip": "ESQUEMA E PENA", + "item.create.blueprint_and_quill.tooltip.summary": "Usado para salvar uma Estrutura no mundo para um arquivo .nbt.", + "item.create.blueprint_and_quill.tooltip.condition1": "Passo 1", + "item.create.blueprint_and_quill.tooltip.behaviour1": "Selecione duas coordenadas de extremidade usando B-Direito", + "item.create.blueprint_and_quill.tooltip.condition2": "Passo 2", + "item.create.blueprint_and_quill.tooltip.behaviour2": "_Ctrl-Rolar_ nas faces para ajustar o tamanho. B-Direito de novo para Salvar.", + "item.create.blueprint_and_quill.tooltip.control1": "B-Direito", + "item.create.blueprint_and_quill.tooltip.action1": "Selecione um canto / confirmar salvamento", + "item.create.blueprint_and_quill.tooltip.control2": "Ctrl Pressionado", + "item.create.blueprint_and_quill.tooltip.action2": "Selecione pontos no _meio_ _do_ _ar_. _Rolar_ para ajustar a distância.", + "item.create.blueprint_and_quill.tooltip.control3": "B-Direito enquanto Abaixado", + "item.create.blueprint_and_quill.tooltip.action3": "_Cancela_ e remove a seleção.", + + "block.create.creative_crate.tooltip": "CRIATIVADOR ESQUEMAANNON", + "block.create.creative_crate.tooltip.summary": "Provê um suprimento infinito de blocos para _Esquemaannons_ próximos", + + "block.create.schematicannon.tooltip": "ESQUEMAANNON", + "block.create.schematicannon.tooltip.summary": "Dispara blocos para recriar um _Esquema_ no Mundo. Usa itens de Inventários adjacentes e _Pólvora_ como combustível.", + "block.create.schematicannon.tooltip.control1": "Quando Apertado com B-Direito", + "block.create.schematicannon.tooltip.action1": "Abre a _Interface_", + + "block.create.schematic_table.tooltip": "MESA DE ESQUEMATIZAR", + "block.create.schematic_table.tooltip.summary": "Escreve Esquemas salvos into um _Esquema_ _Vazio_", + "block.create.schematic_table.tooltip.condition1": "Quando recebe um Esquema Vazio", + "block.create.schematic_table.tooltip.behaviour1": "Importa um Arquivo escolhido da sua Pasta de Esquemas", + + "block.create.shaft.tooltip": "EIXO", + "block.create.shaft.tooltip.summary": "_Transmite_ _Rotação_ em uma linha reta.", + + "block.create.cogwheel.tooltip": "RODA DENTADA", + "block.create.cogwheel.tooltip.summary": "_Transmite_ _Rotação_ em uma linha reta, e para _Rodas_ _Dentadas_ adjacentes.", + + "block.create.large_cogwheel.tooltip": "RODA DENTADA GRADE", + "block.create.large_cogwheel.tooltip.summary": "Uma versão maior da _Roda_ _Dentada,_ permitindo mudança na _Velocidade_ de _Rotação_ quando conectada a sua Contraparte.", + + "block.create.encased_shaft.tooltip": "EIXO REVESTIDO", + "block.create.encased_shaft.tooltip.summary": " _Transmite_ _Rotação_ em uma linha reta. Apropriada para propagar Rotação através de Muros.", + + "block.create.gearbox.tooltip": "CAIXA DE TRANSMISSÃO", + "block.create.gearbox.tooltip.summary": "_Transmite_ _Rotação_ em _Quatro_ _direções._ Reverte conexões diretas.", + + "block.create.gearshift.tooltip": "CÂMBIO", + "block.create.gearshift.tooltip.summary": "Um _disjuntor_ de _rotação_ controlável para eixos conectados.", + "block.create.gearshift.tooltip.condition1": "Quando Ligado", + "block.create.gearshift.tooltip.behaviour1": "_Inverte_ a rotação de saída.", + + "block.create.clutch.tooltip": "EMBREAGEM", + "block.create.clutch.tooltip.summary": "Um _disjuntor_ de _rotação_ controlável para os eixos conectados.", + "block.create.clutch.tooltip.condition1": "Quando Ligado", + "block.create.clutch.tooltip.behaviour1": "_Para_ de prover rotação para o outro lado.", + + "block.create.encased_belt.tooltip": "ESTEIRA REVESTIDA", + "block.create.encased_belt.tooltip.summary": "_Transmite_ _Rotação_ através de si e para _Esteiras_ _Revestidas_ conectadas.", + "block.create.encased_belt.tooltip.condition1": "Quando Conectadas com outra Esteira Revestida", + "block.create.encased_belt.tooltip.behaviour1": "Bloco Conectado irá ter a mesma velocidade de rotação, na mesma direção. Esteiras Conectadas não precisam estar viradas para mesma direção.", + + "item.create.belt_connector.tooltip": "ESTEIRA MECÂNICA", + "item.create.belt_connector.tooltip.summary": "Conecta dois _Eixos_ com uma _Esteira_ _Mecânica._ Eixos conectados irá ter exatamente a mesma velocidade e direção de rotação. A Esteira pode atuar como um _Transporte_ para _Entidades._", + "item.create.belt_connector.tooltip.control1": "B-Direito em um Eixo", + "item.create.belt_connector.tooltip.action1": "Seleciona o eixo como uma polia da Esteira. Os dois Eixos selecionadas precisam estar _alinhados_ seja na _Vertical,_ _Horizontal_ ou _Diagonal_ na direção da Esteira.", + "item.create.belt_connector.tooltip.control2": "B-Direito enquanto Abaixado", + "item.create.belt_connector.tooltip.action2": "_Cancela_ a seleção da Posição para a Esteira", + + "block.create.belt_support.tooltip": "SUPORTE DA ESTEIRA", + "block.create.belt_support.tooltip.summary": "Apenas um bloco decorativo para montar _Esteiras_ _Mecânicas_ no Chão.", + "block.create.belt_support.tooltip.condition1": "Quando colocado abaixo de uma Esteira", + "block.create.belt_support.tooltip.behaviour1": "Suporta o topo da Esteira, escondendo a parte de baixo.", - "block.create.gearbox.tooltip": "GEARBOX", - "block.create.gearbox.tooltip.summary": "_Relays_ _Rotation_ to _Four_ _directions._ Reverses straight connections.", - - "block.create.gearshift.tooltip": "GEARSHIFT", - "block.create.gearshift.tooltip.summary": "A controllable _rotation_ _switch_ for connected shafts.", - "block.create.gearshift.tooltip.condition1": "When Powered", - "block.create.gearshift.tooltip.behaviour1": "_Reverses_ the outgoing rotation.", - - "block.create.clutch.tooltip": "CLUTCH", - "block.create.clutch.tooltip.summary": "A controllable _rotation_ _switch_ for connected shafts.", - "block.create.clutch.tooltip.condition1": "When Powered", - "block.create.clutch.tooltip.behaviour1": "_Stops_ conveying rotation to the other side.", - - "block.create.encased_belt.tooltip": "ENCASED_BELT", - "block.create.encased_belt.tooltip.summary": "_Relays_ _Rotation_ through its block and to an attached _Encased_ _Belt._", - "block.create.encased_belt.tooltip.condition1": "When Attached to other Encased Belt", - "block.create.encased_belt.tooltip.behaviour1": "Attached Block will have the exact same rotation speed and direction. Attached Belts do not have to face the same way.", - - "item.create.belt_connector.tooltip": "BELT CONNECTOR", - "item.create.belt_connector.tooltip.summary": "Connects two _Shafts_ with a _Mechanical_ _Belt._ Connected shafts will have the exact same rotation speed and direction. The Belt can act as a _Conveyor_ for _Entities._", - "item.create.belt_connector.tooltip.control1": "R-Clicked on Shaft", - "item.create.belt_connector.tooltip.action1": "Selects the shaft as one pulley of the Belt. Both selected Shafts have to _line_ _up_ either _Vertically,_ _Horizontally_ or _Diagonally_ towards the Belt's Direction.", - "item.create.belt_connector.tooltip.control2": "R-Click while Sneaking", - "item.create.belt_connector.tooltip.action2": "_Resets_ the first selected position for the Belt", - - "block.create.belt_support.tooltip": "BELT SUPPORT", - "block.create.belt_support.tooltip.summary": "A _purely_ _decorational_ block suitable for mounting _Mechanical_ _Belts_ to the Ground.", - "block.create.belt_support.tooltip.condition1": "When placed below a Belt", - "block.create.belt_support.tooltip.behaviour1": "Supports the top of the Belt, hiding the bottom layer.", - "block.create.motor.tooltip": "MOTOR", - "block.create.motor.tooltip.summary": "A configurable source of _Rotational_ _Force_", + "block.create.motor.tooltip.summary": "Uma fonte de _Força_ _Rotacional_ configurável", - "block.create.water_wheel.tooltip": "WATER WHEEL", - "block.create.water_wheel.tooltip.summary": "Provides _Rotational_ _Force_ taken from adjacent _Water_ _Currents._", + "block.create.water_wheel.tooltip": "RODA DE ÁGUA", + "block.create.water_wheel.tooltip.summary": "Prove _Força_ _Rotacional_ tirada de _Correntes_ de _Água_ próximas.", - "block.create.encased_fan.tooltip": "ENCASED FAN", - "block.create.encased_fan.tooltip.summary": "Converts _Rotational_ _Force_ to _Air_ _Currents_ and back. Has a variety of uses.", - "block.create.encased_fan.tooltip.condition1": "When above Fire", - "block.create.encased_fan.tooltip.behaviour1": "Provides _Rotational_ _Force_ (has to be vertical)", - "block.create.encased_fan.tooltip.condition2": "When Rotated", - "block.create.encased_fan.tooltip.behaviour2": "_Pushes_ Entities on one side, _Pulls_ on the other. Force and Speed depend on incoming Rotations.", - "block.create.encased_fan.tooltip.condition3": "When air flows through special blocks", - "block.create.encased_fan.tooltip.behaviour3": "Processes items in front of the Block: _Water_ washes, _Fire_ smokes and _Lava_ smelts the ingredient.", + "block.create.encased_fan.tooltip": "VENTILADO REVESTIDO", + "block.create.encased_fan.tooltip.summary": "Converte _Força_ _Rotacional_ em _Correntes_ de _Ar_ e vice-versa. Muitos usos.", + "block.create.encased_fan.tooltip.condition1": "Quando sobre Fogo", + "block.create.encased_fan.tooltip.behaviour1": "Prove _Força_ _Rotacional_ (precisa ser na vertical)", + "block.create.encased_fan.tooltip.condition2": "Quando Invertido", + "block.create.encased_fan.tooltip.behaviour2": "_Empurra_ Entidades em um lado, _Puxa_ entidades no outro. Força e Velocidade dependem da Rotação de entrada.", + "block.create.encased_fan.tooltip.condition3": "Quando ar flui através de blocos especiais", + "block.create.encased_fan.tooltip.behaviour3": "Processa itens na frente do Bloco: _Água_ alva, _Fogo_ defuma, e _Lava_ derrete o ingrediente.", - "block.create.turntable.tooltip": "TURNTABLE", - "block.create.turntable.tooltip.summary": "Turns _Rotational_ _Force_ into refined Motion Sickness.", + "block.create.turntable.tooltip": "MESA GIRATÓRIA", + "block.create.turntable.tooltip.summary": "Muda a _Força_ _Rotacional_ em uma forma refinada de Enjoo.", - "block.create.crushing_wheel.tooltip": "CRUSHING WHEEL", - "block.create.crushing_wheel.tooltip.summary": "Large rotatable wheels that _break_ _down_ anything stopping their motion.", - "block.create.crushing_wheel.tooltip.condition1": "When attached to other Crushing Wheel", - "block.create.crushing_wheel.tooltip.behaviour1": "Forms a crushing setup for processing a variety of things. The Wheels' teeth have to connect and moving with the _same_ _speed_ in _opposite_ _directions._", + "block.create.crushing_wheel.tooltip": "RODA DE MOER", + "block.create.crushing_wheel.tooltip.summary": "Grandes rodas giratórias que _esmagam_ qualquer coisa que impeça seu movimento.", + "block.create.crushing_wheel.tooltip.condition1": "Quando conectado a outras Rodas de Moer", + "block.create.crushing_wheel.tooltip.behaviour1": "Forma uma estrutura de esmagamento para processar uma variedade de coisas. Os Dentes da rota precisam estar conectados e se movimentando com a _mesma_ _velocidade_ em _direções_ _opostas._", + + "block.create.mechanical_press.tooltip": "PRENSA MECÂNICA", + "block.create.mechanical_press.tooltip.summary": "Um forte pistão usado para comprimir itens abaixo dele. Precisa de _Força_ _Rotacional_ constante", + "block.create.mechanical_press.tooltip.condition1": "Quando Ligado com Redstone", + "block.create.mechanical_press.tooltip.behaviour1": "_Inicia_ compressão de itens jogados abaixo dele.", + "block.create.mechanical_press.tooltip.condition2": "Quando Sobre uma Esteira Mecânica", + "block.create.mechanical_press.tooltip.behaviour2": "_Automaticamente_ comprime itens que passando na Esteira.", + + "block.create.mechanical_piston.tooltip": "PISTÃO MECÂNICO", + "block.create.mechanical_piston.tooltip.summary": "Uma verão melhorada do _Pistão,_ usando _Força_ _Rotacional_ para mover estruturas de forma precisa. _Varas_ de _Extensão_ do _Pistão_ na traseira definem o _Alcance_ deste Dispositivo. Sem extensões o pistão não se move. Use __Chassis_ de _Translado_ para mover mais de uma linha de blocos.", + "block.create.mechanical_piston.tooltip.condition1": "Quando Rodado", + "block.create.mechanical_piston.tooltip.behaviour1": "Começa a mover blocos presos na estrutura. Velocidade e direção diretamente relacionados a Velocidade Rotação de entrada.", + + "block.create.sticky_mechanical_piston.tooltip": "PISTÃO MECÂNICO GRUDENTO", + "block.create.sticky_mechanical_piston.tooltip.summary": "Uma versão melhorada do _Pistão_ _Grudento,_ usando _Força_ _Rotacional_ para mover estruturas de forma precisa. Varas_ de _Extensão_ do _Pistão_ na traseira definem o _Alcance_ deste Dispositivo. Sem extensões o pistão não se move. Use __Chassis_ de _Translado_ para mover mais de uma linha de blocos.", + "block.create.sticky_mechanical_piston.tooltip.condition1": "Quando Rodado", + "block.create.sticky_mechanical_piston.tooltip.behaviour1": "Começa a mover blocos presos na estrutura. Velocidade e direção diretamente relacionados a Velocidade Rotação de entrada.", + + "block.create.piston_pole.tooltip": "VARA DE EXTENSÃO DO PISTÃO", + "block.create.piston_pole.tooltip.summary": "Aumenta o alcance de _Pistões_ _Mecânicos_", + "block.create.piston_pole.tooltip.condition1": "Quando preso a um Pistão Mecânico", + "block.create.piston_pole.tooltip.behaviour1": "Aumenta a extensão dos pistões em 1 bloco", + + "block.create.mechanical_bearing.tooltip": "ROLAMENTO MECÂNICO", + "block.create.mechanical_bearing.tooltip.summary": "Usado para rotacionar _estruturas_ _grandes_ ou geração de _Força_ _Rotacional_ do vento.", + "block.create.mechanical_bearing.tooltip.condition1": "Quando Rodado", + "block.create.mechanical_bearing.tooltip.behaviour1": "Começa a rotacionar _Chassis_ de _Rotação_ conectados e blocos conectados a eles.", + "block.create.mechanical_bearing.tooltip.condition2": "Quando Ligado por Redstone", + "block.create.mechanical_bearing.tooltip.behaviour2": "Começa a passar _Força_ _Rotacional_ das estruturas conectadas. A estrutura dele incluir _Blocos_ de _Vela_ válidos (atualmente qualquer Bloco de Lã).", + + "block.create.translation_chassis.tooltip": "CHASSIS DE TRANSLADO", + "block.create.translation_chassis.tooltip.summary": "Uma base configurável para Estruturas serem movidas por um _Pistão_ _Mecânico._ Esses Blocos precisam formas uma camada de blocos na frente do Pistão.", + "block.create.translation_chassis.tooltip.condition1": "Quando movido por Pistão Mecânico", + "block.create.translation_chassis.tooltip.behaviour1": "_Move_ todos os _Chassis_ _conectados_ na mesma orientação, e Blocos conectados a frente dele. Quando o Pistão volta, blocos apenas serão puxados se a face do chassis for _Grudenta_ (Ver [Ctrl]).", + "block.create.translation_chassis.tooltip.control1": "Quando clicado com B-Direito com Gosma de Slime", + "block.create.translation_chassis.tooltip.action1": "Torna a face clicada _Grudenta._ Quando o pistão volta, o chassis irá _puxar_ _junto_ todos os Blocos conectados na sua coluna e no Alcance configurado.", + + "block.create.rotation_chassis.tooltip": "CHASSIS DE ROTAÇÃO", + "block.create.rotation_chassis.tooltip.summary": "Nessário para rotacionar estruturas om um _Rolamento_ _Mecânico._ ", + "block.create.rotation_chassis.tooltip.condition1": "Quando Rotacionado por Rolamento", + "block.create.rotation_chassis.tooltip.behaviour1": "_Rotaciona_ todos os blocos conectados a lados _Grudentos_ (Veja [Ctrl]) dentro do alcance configurado no seu entorno. _Propaga_ a rotação para outros Chassis de Rotação conectados.", + "block.create.rotation_chassis.tooltip.control1": "Quando clicado com B-Direito com Goma de Slime", + "block.create.rotation_chassis.tooltip.action1": "Torna face clicada em _Grudenta._ Quando o Chassis girar, todos os blocos conectados nesse lado irão girar junto.", + + "block.create.drill.tooltip": "FURADEIRA MECÂNICA", + "block.create.drill.tooltip.summary": "Um dispositivo mecânido feito para _quebrar_ _blocos._", + "block.create.drill.tooltip.condition1": "Quando Rodado", + "block.create.drill.tooltip.behaviour1": "Atua como um Bloco Quebrador _estacionário._ Também _machuca_ _entidades_ na sua área de efeito.", + "block.create.drill.tooltip.condition2": "Quando Empurrado por Pistão Mecânico", + "block.create.drill.tooltip.behaviour2": "Quebra os Blocos na direção do avanço da broca.", + + "block.create.harvester.tooltip": "COLETOR MECÂNICO", + "block.create.harvester.tooltip.summary": "Um cortador de plantas mecânico indicado para automação de culturas de médio porte", + "block.create.harvester.tooltip.condition1": "Quando Empurrado por Pistão Mecânico", + "block.create.harvester.tooltip.behaviour1": "_Colhe_ todas as _safra_ _madura_ que a lâmina passar sobre, e os retorna a estado de crescimento inicial.", + + "block.create.stockswitch.tooltip": "DISJUNTOR DE ARMAZENAMENTO", + "block.create.stockswitch.tooltip.summary": "Alterna um sinal de Redstone com base no _Espaço_ de _Armazenamento_ do Reciente conectado.", + "block.create.stockswitch.tooltip.condition1": "Quando abaixo do Limite Mínimo", + "block.create.stockswitch.tooltip.behaviour1": "Para de enviar _Sinal_ de _Redstone_", + "block.create.stockswitch.tooltip.condition2": "Quando acima do Limite Máximo", + "block.create.stockswitch.tooltip.behaviour2": "Começa a enviar _Sinal_ de _Redstone_ até chegar no Limite Mínio novamente.", + "block.create.stockswitch.tooltip.control1": "Quando clicado com B-Direito", + "block.create.stockswitch.tooltip.action1": "Abre a _Interface_ de _Configuração_", + + "block.create.redstone_bridge.tooltip": "CONEXÃO DE REDSTONE", + "block.create.redstone_bridge.tooltip.summary": "Saida para conexões _Redstone_ _Sem-Fio._ Pode ter _Frequências_ usando qualquer item. Distancia do Sinal é limitada, mas resoavelmente justa.", + "block.create.redstone_bridge.tooltip.condition1": "Quando Ligado", + "block.create.redstone_bridge.tooltip.behaviour1": "Recebendo Conexões da mesma _Frequência_ irá gerar um sinal de Redstone.", + "block.create.redstone_bridge.tooltip.control1": "Quando clicado com B-Direito com um Item", + "block.create.redstone_bridge.tooltip.action1": "Altera a _Frequência_ para aquele item. Até _dois_ _itens_ _diferentes_ podem ser combinados para definir uma Frequência.", + "block.create.redstone_bridge.tooltip.control2": "Quando clicado com B-Direito enquanto Abaixado", + "block.create.redstone_bridge.tooltip.action2": "Muda entre Modo _Receptor_ e _Transmissor_ .", + + "block.create.contact.tooltip": "CONTATO DE REDSTONE", + "block.create.contact.tooltip.summary": "Um dispositivo simples para Mecanimos de Redstone avançados.", + "block.create.contact.tooltip.condition1": "Quando apontando para outro Contato", + "block.create.contact.tooltip.behaviour1": "Provê um _Sinal_ de _Redstone_", + "block.create.contact.tooltip.condition2": "Quando movido por Pistão Mecânico", + "block.create.contact.tooltip.behaviour2": "Ativa todos os Contatos imóveis na passagem", - "block.create.mechanical_press.tooltip": "MECHANICAL PRESS", - "block.create.mechanical_press.tooltip.summary": "A forceful piston for compressing items beneath it. Requires constant _Rotational_ _Force._", - "block.create.mechanical_press.tooltip.condition1": "When Powered by Redstone", - "block.create.mechanical_press.tooltip.behaviour1": "_Starts_ to compress items dropped below it.", - "block.create.mechanical_press.tooltip.condition2": "When Above a Mechanical Belt", - "block.create.mechanical_press.tooltip.behaviour2": "_Automatically_ compresses bypassing items on the Belt.", - - "block.create.mechanical_piston.tooltip": "MECHANICAL PISTON", - "block.create.mechanical_piston.tooltip.summary": "A more advanced version of the _Piston,_ using _Rotational_ _Force_ to precisely move attached structures. _Piston_ _Extension_ _Poles_ at the rear define the _Range_ of this Device. Without extensions, the piston will not move. Use _Translation_ _Chassis_ to move more than a single line of blocks.", - "block.create.mechanical_piston.tooltip.condition1": "When Rotated", - "block.create.mechanical_piston.tooltip.behaviour1": "Starts moving the attached structure. Speed and direction correlate to the incoming Rotation Speed.", - - "block.create.sticky_mechanical_piston.tooltip": "STICKY MECHANICAL PISTON", - "block.create.sticky_mechanical_piston.tooltip.summary": "A more advanced version of the _Sticky_ _Piston,_ using _Rotational_ _Force_ to precisely move attached structures. _Piston_ _Extension_ _Poles_ at the rear define the _Range_ of this Device. Without extensions, the piston will not move. Use _Translation_ _Chassis_ to move more than a single line of blocks.", - "block.create.sticky_mechanical_piston.tooltip.condition1": "When Rotated", - "block.create.sticky_mechanical_piston.tooltip.behaviour1": "Starts moving the attached structure. Speed and direction correlate to the incoming Rotation Speed.", - - "block.create.piston_pole.tooltip": "PISTON POLE", - "block.create.piston_pole.tooltip.summary": "Used to increase the extension range of _Mechanical_ _Pistons_", - "block.create.piston_pole.tooltip.condition1": "When attached to Mechanical Piston", - "block.create.piston_pole.tooltip.behaviour1": "Extends the pistons extension range by 1 block", - - "block.create.mechanical_bearing.tooltip": "MECHANICAL BEARING", - "block.create.mechanical_bearing.tooltip.summary": "Used for rotating _larger_ _structures_ or generating _Rotational_ _Force_ from wind.", - "block.create.mechanical_bearing.tooltip.condition1": "When Rotated", - "block.create.mechanical_bearing.tooltip.behaviour1": "Starts physically rotating attached _Rotation_ _Chassis_ and their attached blocks respectively.", - "block.create.mechanical_bearing.tooltip.condition2": "When Powered by Redstone", - "block.create.mechanical_bearing.tooltip.behaviour2": "Starts providing _Rotational_ _Force_ from rotating its attached structure. The Structure has to include suitable _Sail_ _Blocks_ (Currently any Wool Block).", - - "block.create.translation_chassis.tooltip": "TRANSLATION CHASSIS", - "block.create.translation_chassis.tooltip.summary": "A configurable base for Structures moved by a _Mechanical_ _Piston._ These Blocks have to form the first Layer of blocks in front of the Piston.", - "block.create.translation_chassis.tooltip.condition1": "When Moved by Mechanical Piston", - "block.create.translation_chassis.tooltip.behaviour1": "_Moves_ all _attached_ _Chassis_ with the same orientation, and attached Blocks in front of it. When the Piston retracts, blocks will only be pulled if the chassis' face is _Sticky_ (See [Ctrl]).", - "block.create.translation_chassis.tooltip.control1": "When R-Clicked with Slime Ball", - "block.create.translation_chassis.tooltip.action1": "Makes the clicked face _Sticky._ When the piston retracts, the chassis will _pull_ _back_ all attached Blocks in its column and within the configured Range.", - - "block.create.rotation_chassis.tooltip": "ROTATION CHASSIS", - "block.create.rotation_chassis.tooltip.summary": "Required for rotating structures with the _Mechanical_ _Bearing._ ", - "block.create.rotation_chassis.tooltip.condition1": "When Rotated by Bearing", - "block.create.rotation_chassis.tooltip.behaviour1": "_Rotates_ all blocks attached to _Sticky_ sides (See [Ctrl]) within the configured range around itself. _Transmits_ the rotation to further attached Rotation Chassis.", - "block.create.rotation_chassis.tooltip.control1": "When R-Clicked with Slime Ball", - "block.create.rotation_chassis.tooltip.action1": "Makes the clicked face _Sticky._ When the Chassis rotates, all blocks attached to this side will be rotated with it.", - - "block.create.drill.tooltip": "MECHANICAL DRILL", - "block.create.drill.tooltip.summary": "A mechanical device suitable for _breaking_ _blocks._", - "block.create.drill.tooltip.condition1": "When Rotated", - "block.create.drill.tooltip.behaviour1": "Acts as a _stationary_ Block Breaker. Also _hurts_ _entities_ in its effective area.", - "block.create.drill.tooltip.condition2": "When Pushed by Mechanical Piston", - "block.create.drill.tooltip.behaviour2": "Breaks Blocks the drill is running into.", - - "block.create.harvester.tooltip": "MECHANICAL HARVESTER", - "block.create.harvester.tooltip.summary": "A mechanical plant cutter suitable for medium scale crop automation", - "block.create.harvester.tooltip.condition1": "When Pushed by Mechanical Piston", - "block.create.harvester.tooltip.behaviour1": "_Harvests_ all _mature_ _crops_ the blade is running into, and resets them to their initial growth state.", - - "block.create.stockswitch.tooltip": "STOCKSWITCH", - "block.create.stockswitch.tooltip.summary": "Toggles a Redstone signal based on the _Storage_ _Space_ in the attached Container.", - "block.create.stockswitch.tooltip.condition1": "When below Lower Limit", - "block.create.stockswitch.tooltip.behaviour1": "Stops providing _Redstone_ _Power_", - "block.create.stockswitch.tooltip.condition2": "When above Upper Limit", - "block.create.stockswitch.tooltip.behaviour2": "Starts providing _Redstone_ _Power_ until Lower Limit is reached again.", - "block.create.stockswitch.tooltip.control1": "When R-Clicked", - "block.create.stockswitch.tooltip.action1": "Opens the _Configuration_ _Interface_", - - "block.create.redstone_bridge.tooltip": "REDSTONE LINK", - "block.create.redstone_bridge.tooltip.summary": "Endpoints for _Wireless_ _Redstone_ connections. Can be assigned _Frequencies_ using any item. Signal range is limited, but reasonably far.", - "block.create.redstone_bridge.tooltip.condition1": "When Powered", - "block.create.redstone_bridge.tooltip.behaviour1": "Receiving Links of the same _Frequency_ will provide a Redstone signal.", - "block.create.redstone_bridge.tooltip.control1": "When R-Clicked with an Item", - "block.create.redstone_bridge.tooltip.action1": "Sets the _Frequency_ to that item. A total of _two_ _different_ _items_ can be used in combination for defining a Frequency.", - "block.create.redstone_bridge.tooltip.control2": "When R-Clicked while Sneaking", - "block.create.redstone_bridge.tooltip.action2": "Toggles between _Receiver_ and _Transmitter_ Mode.", - - "block.create.contact.tooltip": "REDSTONE CONTACT", - "block.create.contact.tooltip.summary": "A simple device for advanced Redstone Contraptions.", - "block.create.contact.tooltip.condition1": "When facing other Contact", - "block.create.contact.tooltip.behaviour1": "Provides a _Redstone_ _Signal_", - "block.create.contact.tooltip.condition2": "When moved by Mechanical Piston", - "block.create.contact.tooltip.behaviour2": "Triggers all stationary Contacts passing by", - "block.create.flexcrate.tooltip": "FLEXCRATE", - "block.create.flexcrate.tooltip.summary": "This _Storage_ _Container_ allows Manual control over its capacity. It can hold up to _16_ _Stacks_ of any Item", - "block.create.flexcrate.tooltip.control1": "When R-Clicked", - "block.create.flexcrate.tooltip.action1": "Opens the _Interface_", - - "block.create.extractor.tooltip": "EXTRACTOR", - "block.create.extractor.tooltip.summary": "_Takes_ _items_ from an attached _Inventory_ and drops them onto the ground. Will not drop Items until the space cleared. Can be assigned an item-stack as a _filter._", - "block.create.extractor.tooltip.condition1": "When Powered by Redstone", - "block.create.extractor.tooltip.behaviour1": "_Pauses_ the Extractor", - "block.create.extractor.tooltip.control1": "R-Click on Filter Space", - "block.create.extractor.tooltip.action1": "Assigns currently _held_ _stack_ as the _Filter._ Extractor will pull the item _type_ and _count_ of the filter stack exclusively.", - - "block.create.linked_extractor.tooltip": "LINKED EXTRACTOR", - "block.create.linked_extractor.tooltip.summary": "_Takes_ _items_ from an attached _Inventory_ and drops them onto the ground. Will not drop Items until the space cleared. Can be assigned an item-stack as a _filter._ Can be controlled remotely via a _Redstone_ _Link._", - "block.create.linked_extractor.tooltip.condition1": "When Redstone Link Active", - "block.create.linked_extractor.tooltip.behaviour1": "_Pauses_ the Extractor", - "block.create.linked_extractor.tooltip.control1": "R-Click on Filter Space", - "block.create.linked_extractor.tooltip.action1": "Assigns currently _held_ _stack_ as the _Filter._ Extractor will pull the item _type_ and _count_ of the filter stack exclusively.", - "block.create.linked_extractor.tooltip.control2": "R-Click on Frequency Space", - "block.create.linked_extractor.tooltip.action2": "Assigns currently _held_ _item_ as part of the Frequency listened on. Whenever a transmitting _Redstone_ _Link_ of the same frequency is powered, this Extractor will pause.", - - "block.create.belt_funnel.tooltip": "BELT FUNNEL", - "block.create.belt_funnel.tooltip.summary": "Collects incoming items on a _Mechanical_ _Belt_ and inserts them into the attached _Inventory_ if possible. Has to be directly _on_ _top_ of a Belt, with the opening facing against the Belts' movement direction. The inventory has to be on the same height as the funnel.", - - "block.create.entity_detector.tooltip": "BELT OBSERVER", - "block.create.entity_detector.tooltip.summary": "Detects items passing by on a _Mechanical_ _Belt_ in front of it. Works well with a _Piston_ on top, pushing certain items off.", - "block.create.entity_detector.tooltip.condition1": "When item matches Filter", - "block.create.entity_detector.tooltip.behaviour1": "Provides a short _Redstone_ _pulse_ to all sides. An Empty Filter matches all passing items.", - "block.create.entity_detector.tooltip.control1": "R-Click on Filter Space", - "block.create.entity_detector.tooltip.action1": "Assigns currently _held_ _stack_ as the _Filter._ Observer will react to this item type only.", - - "block.create.pulse_repeater.tooltip": "PULSE REPEATER", - "block.create.pulse_repeater.tooltip.summary": "A simple circuit for cutting passing redstone signals to a length of _1_ _tick._", - - "block.create.flexpeater.tooltip": "FLEX REPEATER", - "block.create.flexpeater.tooltip.summary": "An advanced _Redstone_ _Repeater_ with a _configurable_ _Delay_ up to 30 Minutes.", - + "block.create.flexcrate.tooltip.summary": "Este _Recipiente_ de _Armazenamento_ permite controle Manual da sua capacidade. Pode conter até _16_ _Pilhas_ de qualquer Item", + "block.create.flexcrate.tooltip.control1": "Quando clicado com B-Direito", + "block.create.flexcrate.tooltip.action1": "Abre a _Interface_", + + "block.create.extractor.tooltip": "EXTRATOR", + "block.create.extractor.tooltip.summary": "_Pega_ _itens_ de um _Inventário_ conectado e os joga no chão. Não irá jogar Itens até o espaço ser limpo. Pode ser configurado como para ser um _filtro._", + "block.create.extractor.tooltip.condition1": "Quando Ligado por Redstone", + "block.create.extractor.tooltip.behaviour1": "_Para_ o Extractor", + "block.create.extractor.tooltip.control1": "B-Direito no Espaço de Filtro", + "block.create.extractor.tooltip.action1": "Configura a _pilha_ atualmente _presente_ como um _Filtro._ Extrator irá apenas puxar apenas _tipo_ e _quantidade_ do item filtro.", + + "block.create.linked_extractor.tooltip": "EXTRATOR CONECTADO", + "block.create.linked_extractor.tooltip.summary": "_Pega_ _itens_ de um _Inventário_ e os joga no chão. Não vai jogar Itens até que o espaço ser limpo. Pode ser configurado como para ser um _filtro._ Pode ser controlado remotamente via _Conexão_ de _Redstone._", + "block.create.linked_extractor.tooltip.condition1": "Quando Conexão de Redstone Ativa", + "block.create.linked_extractor.tooltip.behaviour1": "_Para_ o Extrator", + "block.create.linked_extractor.tooltip.control1": "B-Direito no Espaço de Filtro", + "block.create.linked_extractor.tooltip.action1": "Configura a _pilha_ atualmente _presente_ como um _Filtro._ Extrator irá apenas puxar apenas _tipo_ e _quantidade_ do item filtro.", + "block.create.linked_extractor.tooltip.control2": "B-Direito no Espaço de Frequência", + "block.create.linked_extractor.tooltip.action2": "Configura a _pilha_ atualmente _presente_ como parte da Frequência a ouvir. Quando um _Conexão_ de _Redstone_ transmissor da mesma frequência é ligado, esse Extrator irá parar.", + + "block.create.belt_funnel.tooltip": "FUNIL DE ESTEIRA", + "block.create.belt_funnel.tooltip.summary": "Coleta itens passando numa _Esteira_ _Mecânica_ e os insere no _Inventário_ conetado, se possível. Precisa estar diretamente _sobre_ uma Esteira, com a abertura virada contra o movimento da Esteira. O inventário precisa estar na mesma altura que o funil.", + + "block.create.entity_detector.tooltip": "OBSERVADOR DE ESTEIRA", + "block.create.entity_detector.tooltip.summary": "Detecta os itens passando numa _Esteira_ _Mecânica_ a sua frente. Funciona bem com um _Pistão_ em cima, empurrando certos itens.", + "block.create.entity_detector.tooltip.condition1": "Quando item bate com Filtro", + "block.create.entity_detector.tooltip.behaviour1": "Provê um _Pulso_ curto de _Redstone_ para todos os lados. Um Filtro vazio considera todos os itens passando.", + "block.create.entity_detector.tooltip.control1": "B-Direito em um Espaço de Filtro", + "block.create.entity_detector.tooltip.action1": "Configura a _pilha_ atualmente _presente_ como um _Filtro._ Observador irá reagir apenas a esse tipo de item.", + + "block.create.pulse_repeater.tooltip": "REPETIDOR DE PULSO", + "block.create.pulse_repeater.tooltip.summary": "Um circuito simples para cortar pulsos de Redstone até um comprimento de _1_ _tick._", + + "block.create.flexpeater.tooltip": "REPETIDOR FLEX", + "block.create.flexpeater.tooltip.summary": "Um um _Repetidor_ de _Redstone_ avançado com um _Delay_ _configurável_ de até 30 Minutos.", + "itemGroup.create": "Create" } From baba95e0ebecd987475da8f99d429fd904fc0291 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Mon, 21 Oct 2019 23:45:16 +0200 Subject: [PATCH 5/8] Spiffy Blockzapper - Reworked animated models for the Handheld Blockzapper - Fixed beam render on non-default FOV settings --- build.gradle | 6 +- src/main/java/com/simibubi/create/Create.java | 2 +- .../com/simibubi/create/CreateClient.java | 14 +- .../com/simibubi/create/CreateItemGroup.java | 2 +- .../placementHandgun/BuilderGunHandler.java | 15 +- .../BuilderGunItemRenderer.java | 136 +++---- .../placementHandgun/BuilderGunModel.java | 45 ++- .../placementHandgun/BuilderGunScreen.java | 4 + .../symmetry/client/SymmetryWandModel.java | 7 + src/main/resources/META-INF/mods.toml | 2 +- .../resources/assets/create/lang/en_us.json | 1 + .../create/models/item/placement_handgun.json | 71 ++-- .../item/placement_handgun/accelerator.json | 63 ++++ .../placement_handgun/amplifier_core.json | 33 ++ .../models/item/placement_handgun/body.json | 66 +++- .../placement_handgun/chorus_accelerator.json | 76 ++-- .../chorus_accelerator_core.json | 23 -- .../placement_handgun/chorus_amplifier.json | 72 +--- .../chorus_amplifier_core.json | 71 ---- .../item/placement_handgun/chorus_body.json | 66 +++- .../item/placement_handgun/chorus_master.json | 341 ------------------ .../placement_handgun/chorus_retriever.json | 44 +-- .../item/placement_handgun/chorus_scope.json | 60 ++- .../models/item/placement_handgun/core.json | 39 +- .../placement_handgun/gold_accelerator.json | 76 ++-- .../gold_accelerator_core.json | 23 -- .../placement_handgun/gold_amplifier.json | 43 +-- .../gold_amplifier_core.json | 42 --- .../item/placement_handgun/gold_body.json | 66 +++- .../placement_handgun/gold_retriever.json | 28 +- .../item/placement_handgun/gold_scope.json | 54 ++- .../textures/block/andesite_alloy_mesh.png | Bin 0 -> 383 bytes .../textures/block/blaze_brass_mesh.png | Bin 0 -> 628 bytes .../textures/block/chorus_chrome_mesh.png | Bin 0 -> 631 bytes 34 files changed, 610 insertions(+), 981 deletions(-) create mode 100644 src/main/resources/assets/create/models/item/placement_handgun/accelerator.json create mode 100644 src/main/resources/assets/create/models/item/placement_handgun/amplifier_core.json delete mode 100644 src/main/resources/assets/create/models/item/placement_handgun/chorus_accelerator_core.json delete mode 100644 src/main/resources/assets/create/models/item/placement_handgun/chorus_amplifier_core.json delete mode 100644 src/main/resources/assets/create/models/item/placement_handgun/chorus_master.json delete mode 100644 src/main/resources/assets/create/models/item/placement_handgun/gold_accelerator_core.json delete mode 100644 src/main/resources/assets/create/models/item/placement_handgun/gold_amplifier_core.json create mode 100644 src/main/resources/assets/create/textures/block/andesite_alloy_mesh.png create mode 100644 src/main/resources/assets/create/textures/block/blaze_brass_mesh.png create mode 100644 src/main/resources/assets/create/textures/block/chorus_chrome_mesh.png diff --git a/build.gradle b/build.gradle index ca34bd323..1ac49b931 100644 --- a/build.gradle +++ b/build.gradle @@ -20,7 +20,7 @@ archivesBaseName = 'create' sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = '1.8' minecraft { - mappings channel: 'snapshot', version: '20191012-1.14.3' + mappings channel: 'snapshot', version: '20191021-1.14.3' runs { client { @@ -71,12 +71,12 @@ repositories { } dependencies { - minecraft 'net.minecraftforge:forge:1.14.4-28.1.45' + minecraft 'net.minecraftforge:forge:1.14.4-28.1.61' // compile against the JEI API but do not include it at runtime compileOnly fg.deobf("mezz.jei:jei-1.14.4:6.0.0.18:api") // at runtime, use the full JEI jar - //runtimeOnly fg.deobf("mezz.jei:jei-1.14.4:6.0.0.18") + runtimeOnly fg.deobf("mezz.jei:jei-1.14.4:6.0.0.10") } jar { diff --git a/src/main/java/com/simibubi/create/Create.java b/src/main/java/com/simibubi/create/Create.java index 6ad1204b6..17f4844c4 100644 --- a/src/main/java/com/simibubi/create/Create.java +++ b/src/main/java/com/simibubi/create/Create.java @@ -28,7 +28,7 @@ public class Create { public static final String ID = "create"; public static final String NAME = "Create"; - public static final String VERSION = "0.1.1"; + public static final String VERSION = "0.1.1a"; public static Logger logger = LogManager.getLogger(); public static ItemGroup creativeTab = new CreateItemGroup(); diff --git a/src/main/java/com/simibubi/create/CreateClient.java b/src/main/java/com/simibubi/create/CreateClient.java index 13f29c9b6..cec3d53db 100644 --- a/src/main/java/com/simibubi/create/CreateClient.java +++ b/src/main/java/com/simibubi/create/CreateClient.java @@ -24,6 +24,8 @@ import net.minecraft.util.ResourceLocation; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.client.event.ModelBakeEvent; +import net.minecraftforge.client.event.ModelRegistryEvent; +import net.minecraftforge.client.model.ModelLoader; import net.minecraftforge.eventbus.api.IEventBus; import net.minecraftforge.fml.DistExecutor; import net.minecraftforge.fml.config.ModConfig; @@ -44,9 +46,10 @@ public class CreateClient { modEventBus.addListener(CreateClient::clientInit); modEventBus.addListener(CreateClient::createConfigs); modEventBus.addListener(CreateClient::onModelBake); + modEventBus.addListener(CreateClient::onModelRegistry); }); } - + public static void clientInit(FMLClientSetupEvent event) { schematicSender = new ClientSchematicLoader(); schematicHandler = new SchematicHandler(); @@ -97,7 +100,14 @@ public class CreateClient { BlockModelShapes.getPropertyMapString(AllBlocks.WINDOW_IN_A_BLOCK.get().getDefaultState() .with(BlockStateProperties.WATERLOGGED, true).getValues())), WindowInABlockModel::new); + } + @OnlyIn(Dist.CLIENT) + public static void onModelRegistry(ModelRegistryEvent event) { + for (String location : SymmetryWandModel.getCustomModelLocations()) + ModelLoader.addSpecialModel(new ResourceLocation(Create.ID, "item/" + location)); + for (String location : BuilderGunModel.getCustomModelLocations()) + ModelLoader.addSpecialModel(new ResourceLocation(Create.ID, "item/" + location)); } protected static ModelResourceLocation getItemModelLocation(AllItems item) { @@ -114,6 +124,4 @@ public class CreateClient { modelRegistry.put(location, factory.apply(modelRegistry.get(location))); } - - } diff --git a/src/main/java/com/simibubi/create/CreateItemGroup.java b/src/main/java/com/simibubi/create/CreateItemGroup.java index 4fdd1e99c..b15e55879 100644 --- a/src/main/java/com/simibubi/create/CreateItemGroup.java +++ b/src/main/java/com/simibubi/create/CreateItemGroup.java @@ -15,7 +15,7 @@ public final class CreateItemGroup extends ItemGroup { @Override public ItemStack createIcon() { - return new ItemStack(AllItems.SYMMETRY_WAND.get()); + return new ItemStack(AllBlocks.COGWHEEL.get()); } @Override diff --git a/src/main/java/com/simibubi/create/modules/curiosities/placementHandgun/BuilderGunHandler.java b/src/main/java/com/simibubi/create/modules/curiosities/placementHandgun/BuilderGunHandler.java index 7edfdbd06..7909bd6eb 100644 --- a/src/main/java/com/simibubi/create/modules/curiosities/placementHandgun/BuilderGunHandler.java +++ b/src/main/java/com/simibubi/create/modules/curiosities/placementHandgun/BuilderGunHandler.java @@ -46,11 +46,11 @@ import net.minecraftforge.fml.common.Mod.EventBusSubscriber; @EventBusSubscriber(value = Dist.CLIENT) public class BuilderGunHandler { - private static List cachedBeams; - private static float leftHandAnimation; - private static float rightHandAnimation; - private static float lastLeftHandAnimation; - private static float lastRightHandAnimation; + public static List cachedBeams; + public static float leftHandAnimation; + public static float rightHandAnimation; + public static float lastLeftHandAnimation; + public static float lastRightHandAnimation; private static boolean dontReequipLeft; private static boolean dontReequipRight; @@ -86,8 +86,9 @@ public class BuilderGunHandler { ClientPlayerEntity player = Minecraft.getInstance().player; float yaw = (float) ((player.getYaw(partialTicks)) / -180 * Math.PI); float pitch = (float) ((player.getPitch(partialTicks)) / -180 * Math.PI); - Vec3d barrelPosNoTransform = new Vec3d(mainHand == (player.getPrimaryHand() == HandSide.RIGHT) ? -.35f : .35f, - -0.1f, 1); + boolean rightHand = mainHand == (player.getPrimaryHand() == HandSide.RIGHT); + float zOffset = ((float) Minecraft.getInstance().gameSettings.fov - 70) / -100; + Vec3d barrelPosNoTransform = new Vec3d(rightHand ? -.35f : .35f, -0.115f, .75f + zOffset); Vec3d barrelPos = player.getEyePosition(partialTicks) .add(barrelPosNoTransform.rotatePitch(pitch).rotateYaw(yaw)); return barrelPos; diff --git a/src/main/java/com/simibubi/create/modules/curiosities/placementHandgun/BuilderGunItemRenderer.java b/src/main/java/com/simibubi/create/modules/curiosities/placementHandgun/BuilderGunItemRenderer.java index 372b66d8d..f7bfe386a 100644 --- a/src/main/java/com/simibubi/create/modules/curiosities/placementHandgun/BuilderGunItemRenderer.java +++ b/src/main/java/com/simibubi/create/modules/curiosities/placementHandgun/BuilderGunItemRenderer.java @@ -1,5 +1,11 @@ package com.simibubi.create.modules.curiosities.placementHandgun; +import static com.simibubi.create.modules.curiosities.placementHandgun.BuilderGunItem.Components.Accelerator; +import static com.simibubi.create.modules.curiosities.placementHandgun.BuilderGunItem.Components.Amplifier; +import static com.simibubi.create.modules.curiosities.placementHandgun.BuilderGunItem.Components.Body; +import static com.simibubi.create.modules.curiosities.placementHandgun.BuilderGunItem.Components.Retriever; +import static com.simibubi.create.modules.curiosities.placementHandgun.BuilderGunItem.Components.Scope; + import com.mojang.blaze3d.platform.GLX; import com.mojang.blaze3d.platform.GlStateManager; import com.simibubi.create.modules.curiosities.placementHandgun.BuilderGunItem.ComponentTier; @@ -7,10 +13,13 @@ import com.simibubi.create.modules.curiosities.placementHandgun.BuilderGunItem.C import net.minecraft.block.BlockState; import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.player.ClientPlayerEntity; import net.minecraft.client.renderer.ItemRenderer; +import net.minecraft.client.renderer.model.IBakedModel; import net.minecraft.client.renderer.tileentity.ItemStackTileEntityRenderer; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTUtil; +import net.minecraft.util.HandSide; import net.minecraft.util.math.MathHelper; import net.minecraftforge.client.model.animation.Animation; @@ -20,85 +29,86 @@ public class BuilderGunItemRenderer extends ItemStackTileEntityRenderer { public void renderByItem(ItemStack stack) { ItemRenderer itemRenderer = Minecraft.getInstance().getItemRenderer(); BuilderGunModel mainModel = (BuilderGunModel) itemRenderer.getModelWithOverrides(stack); - float worldTime = Animation.getWorldTime(Minecraft.getInstance().world, - Minecraft.getInstance().getRenderPartialTicks()); - + float pt = Minecraft.getInstance().getRenderPartialTicks(); + float worldTime = Animation.getWorldTime(Minecraft.getInstance().world, pt); + GlStateManager.pushMatrix(); GlStateManager.translatef(0.5F, 0.5F, 0.5F); float lastCoordx = GLX.lastBrightnessX; float lastCoordy = GLX.lastBrightnessY; - GLX.glMultiTexCoord2f(GLX.GL_TEXTURE1, Math.min(lastCoordx + 60, 240), Math.min(lastCoordy + 120, 240)); - + itemRenderer.renderItem(stack, mainModel.getBakedModel()); - - if (BuilderGunItem.getTier(Components.Body, stack) == ComponentTier.None) - itemRenderer.renderItem(stack, mainModel.body); - if (BuilderGunItem.getTier(Components.Body, stack) == ComponentTier.ChorusChrome) - itemRenderer.renderItem(stack, mainModel.chorusBody); - - if (BuilderGunItem.getTier(Components.Scope, stack) == ComponentTier.BlazeBrass) - itemRenderer.renderItem(stack, mainModel.goldScope); - if (BuilderGunItem.getTier(Components.Scope, stack) == ComponentTier.ChorusChrome) - itemRenderer.renderItem(stack, mainModel.chorusScope); - - if (BuilderGunItem.getTier(Components.Amplifier, stack) == ComponentTier.BlazeBrass) - itemRenderer.renderItem(stack, mainModel.goldAmp); - if (BuilderGunItem.getTier(Components.Amplifier, stack) == ComponentTier.ChorusChrome) - itemRenderer.renderItem(stack, mainModel.chorusAmp); - - if (BuilderGunItem.getTier(Components.Retriever, stack) == ComponentTier.BlazeBrass) - itemRenderer.renderItem(stack, mainModel.goldRetriever); - if (BuilderGunItem.getTier(Components.Retriever, stack) == ComponentTier.ChorusChrome) - itemRenderer.renderItem(stack, mainModel.chorusRetriever); - - if (BuilderGunItem.getTier(Components.Accelerator, stack) == ComponentTier.BlazeBrass) - itemRenderer.renderItem(stack, mainModel.goldAcc); - if (BuilderGunItem.getTier(Components.Accelerator, stack) == ComponentTier.ChorusChrome) - itemRenderer.renderItem(stack, mainModel.chorusAcc); + renderComponent(stack, Body, itemRenderer, mainModel.body, mainModel.goldBody, mainModel.chorusBody); + renderComponent(stack, Amplifier, itemRenderer, null, mainModel.goldAmp, mainModel.chorusAmp); + renderComponent(stack, Retriever, itemRenderer, null, mainModel.goldRetriever, mainModel.chorusRetriever); + renderComponent(stack, Scope, itemRenderer, null, mainModel.goldScope, mainModel.chorusScope); - if (mainModel.showBlock && stack.hasTag() && stack.getTag().contains("BlockUsed")) { - BlockState state = NBTUtil.readBlockState(stack.getTag().getCompound("BlockUsed")); - - GlStateManager.pushMatrix(); - GlStateManager.translatef(-0.8F, -0.7F, -0.5F); - GlStateManager.scalef(0.25F, 0.25F, 0.25F); - itemRenderer.renderItem(new ItemStack(state.getBlock()), - Minecraft.getInstance().getBlockRendererDispatcher().getModelForState(state)); - GlStateManager.popMatrix(); - } + // Block indicator + if (mainModel.showBlock && stack.hasTag() && stack.getTag().contains("BlockUsed")) + renderBlockUsed(stack, itemRenderer); + + ClientPlayerEntity player = Minecraft.getInstance().player; + boolean leftHanded = player.getPrimaryHand() == HandSide.LEFT; + boolean mainHand = player.getHeldItemMainhand() == stack; + boolean offHand = player.getHeldItemOffhand() == stack; + float last = mainHand ^ leftHanded ? BuilderGunHandler.lastRightHandAnimation + : BuilderGunHandler.lastLeftHandAnimation; + float current = mainHand ^ leftHanded ? BuilderGunHandler.rightHandAnimation + : BuilderGunHandler.leftHandAnimation; + float animation = MathHelper.clamp(MathHelper.lerp(pt, last, current) * 5, 0, 1); + // Core glows GlStateManager.disableLighting(); - - GLX.glMultiTexCoord2f(GLX.GL_TEXTURE1, MathHelper.sin(worldTime * 5) * 120 + 120, 120); - if (BuilderGunItem.getTier(Components.Accelerator, stack) == ComponentTier.BlazeBrass) - itemRenderer.renderItem(stack, mainModel.goldAccCore); - if (BuilderGunItem.getTier(Components.Accelerator, stack) == ComponentTier.ChorusChrome) - itemRenderer.renderItem(stack, mainModel.chorusAccCore); - - GLX.glMultiTexCoord2f(GLX.GL_TEXTURE1, 240, 120); - if (BuilderGunItem.getTier(Components.Body, stack) == ComponentTier.BlazeBrass) - itemRenderer.renderItem(stack, mainModel.goldBody); - - GLX.glMultiTexCoord2f(GLX.GL_TEXTURE1, 240, 240); - if (BuilderGunItem.getTier(Components.Amplifier, stack) == ComponentTier.BlazeBrass) - itemRenderer.renderItem(stack, mainModel.goldAmpCore); - if (BuilderGunItem.getTier(Components.Amplifier, stack) == ComponentTier.ChorusChrome) - itemRenderer.renderItem(stack, mainModel.chorusAmpCore); + float multiplier = MathHelper.sin(worldTime * 5); + if (mainHand || offHand) { + multiplier = animation; + } + GLX.glMultiTexCoord2f(GLX.GL_TEXTURE1, multiplier * 240, 120); + itemRenderer.renderItem(stack, mainModel.core); + if (BuilderGunItem.getTier(Amplifier, stack) != ComponentTier.None) + itemRenderer.renderItem(stack, mainModel.ampCore); + GLX.glMultiTexCoord2f(GLX.GL_TEXTURE1, lastCoordx, lastCoordy); + GlStateManager.enableLighting(); + + // Accelerator spins + float angle = worldTime * -25; + if (mainHand || offHand) + angle += 360 * animation; - float angle = worldTime * -50; angle %= 360; - - float offset = -.19f; + float offset = -.155f; GlStateManager.translatef(0, offset, 0); GlStateManager.rotatef(angle, 0, 0, 1); GlStateManager.translatef(0, -offset, 0); - itemRenderer.renderItem(stack, mainModel.rod); - - GLX.glMultiTexCoord2f(GLX.GL_TEXTURE1, lastCoordx, lastCoordy); - GlStateManager.enableLighting(); + renderComponent(stack, Accelerator, itemRenderer, mainModel.acc, mainModel.goldAcc, mainModel.chorusAcc); GlStateManager.popMatrix(); } + public void renderBlockUsed(ItemStack stack, ItemRenderer itemRenderer) { + BlockState state = NBTUtil.readBlockState(stack.getTag().getCompound("BlockUsed")); + + GlStateManager.pushMatrix(); + GlStateManager.translatef(-0.8F, -0.7F, -0.5F); + GlStateManager.scalef(0.25F, 0.25F, 0.25F); + itemRenderer.renderItem(new ItemStack(state.getBlock()), + Minecraft.getInstance().getBlockRendererDispatcher().getModelForState(state)); + GlStateManager.popMatrix(); + } + + public void renderComponent(ItemStack stack, Components component, ItemRenderer itemRenderer, IBakedModel none, + IBakedModel gold, IBakedModel chorus) { + ComponentTier tier = BuilderGunItem.getTier(component, stack); + + IBakedModel model = tier == ComponentTier.ChorusChrome ? chorus : gold; + if (tier == ComponentTier.None) { + if (none == null) + return; + model = none; + } + + itemRenderer.renderItem(stack, model); + } + } diff --git a/src/main/java/com/simibubi/create/modules/curiosities/placementHandgun/BuilderGunModel.java b/src/main/java/com/simibubi/create/modules/curiosities/placementHandgun/BuilderGunModel.java index dedd8f92c..aeebae836 100644 --- a/src/main/java/com/simibubi/create/modules/curiosities/placementHandgun/BuilderGunModel.java +++ b/src/main/java/com/simibubi/create/modules/curiosities/placementHandgun/BuilderGunModel.java @@ -1,5 +1,8 @@ package com.simibubi.create.modules.curiosities.placementHandgun; +import java.util.Arrays; +import java.util.List; + import javax.vecmath.Matrix4f; import org.apache.commons.lang3.tuple.Pair; @@ -13,30 +16,36 @@ import net.minecraftforge.client.event.ModelBakeEvent; @SuppressWarnings("deprecation") public class BuilderGunModel extends CustomRenderItemBakedModel { - public IBakedModel rod; - public IBakedModel body; public boolean showBlock; - + + public IBakedModel core; + public IBakedModel body; + public IBakedModel ampCore; + public IBakedModel acc; + public IBakedModel goldBody; public IBakedModel goldScope; public IBakedModel goldAmp; - public IBakedModel goldAmpCore; public IBakedModel goldRetriever; public IBakedModel goldAcc; - public IBakedModel goldAccCore; - + public IBakedModel chorusBody; public IBakedModel chorusScope; public IBakedModel chorusAmp; - public IBakedModel chorusAmpCore; public IBakedModel chorusRetriever; public IBakedModel chorusAcc; - public IBakedModel chorusAccCore; - + public BuilderGunModel(IBakedModel template) { super(template); } - + + public static List getCustomModelLocations() { + String p = "placement_handgun/"; + return Arrays.asList(p + "core", p + "body", p + "amplifier_core", p + "accelerator", p + "gold_body", + p + "gold_scope", p + "gold_amplifier", p + "gold_retriever", p + "gold_accelerator", p + "chorus_body", + p + "chorus_amplifier", p + "chorus_retriever", p + "chorus_accelerator"); + } + @Override public Pair handlePerspective(TransformType cameraTransformType) { showBlock = cameraTransformType == TransformType.GUI; @@ -46,26 +55,24 @@ public class BuilderGunModel extends CustomRenderItemBakedModel { @Override public CustomRenderItemBakedModel loadPartials(ModelBakeEvent event) { String p = "placement_handgun/"; - - this.rod = loadCustomModel(event, p + "core"); + + this.core = loadCustomModel(event, p + "core"); this.body = loadCustomModel(event, p + "body"); - + this.ampCore = loadCustomModel(event, p + "amplifier_core"); + this.acc = loadCustomModel(event, p + "accelerator"); + this.goldBody = loadCustomModel(event, p + "gold_body"); this.goldScope = loadCustomModel(event, p + "gold_scope"); this.goldAmp = loadCustomModel(event, p + "gold_amplifier"); - this.goldAmpCore = loadCustomModel(event, p + "gold_amplifier_core"); this.goldRetriever = loadCustomModel(event, p + "gold_retriever"); this.goldAcc = loadCustomModel(event, p + "gold_accelerator"); - this.goldAccCore = loadCustomModel(event, p + "gold_accelerator_core"); - + this.chorusBody = loadCustomModel(event, p + "chorus_body"); this.chorusScope = loadCustomModel(event, p + "chorus_scope"); this.chorusAmp = loadCustomModel(event, p + "chorus_amplifier"); - this.chorusAmpCore = loadCustomModel(event, p + "chorus_amplifier_core"); this.chorusRetriever = loadCustomModel(event, p + "chorus_retriever"); this.chorusAcc = loadCustomModel(event, p + "chorus_accelerator"); - this.chorusAccCore = loadCustomModel(event, p + "chorus_accelerator_core"); - + return this; } diff --git a/src/main/java/com/simibubi/create/modules/curiosities/placementHandgun/BuilderGunScreen.java b/src/main/java/com/simibubi/create/modules/curiosities/placementHandgun/BuilderGunScreen.java index d0dfc3a4a..01dc2909e 100644 --- a/src/main/java/com/simibubi/create/modules/curiosities/placementHandgun/BuilderGunScreen.java +++ b/src/main/java/com/simibubi/create/modules/curiosities/placementHandgun/BuilderGunScreen.java @@ -31,6 +31,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundNBT; import net.minecraft.nbt.NBTUtil; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.text.TextFormatting; import net.minecraftforge.client.model.data.EmptyModelData; @SuppressWarnings("deprecation") @@ -42,6 +43,7 @@ public class BuilderGunScreen extends AbstractSimiScreen { private final String title = Lang.translate("gui.blockzapper.title"); private final String patternSection = Lang.translate("gui.blockzapper.patternSection"); + private final String needsUpgradedAmplifier = Lang.translate("gui.blockzapper.needsUpgradedAmplifier"); private IconButton replaceModeButton; private Indicator replaceModeIndicator; @@ -96,6 +98,8 @@ public class BuilderGunScreen extends AbstractSimiScreen { if (nbt.contains("SearchDistance")) spreadRangeInput.setState(nbt.getInt("SearchDistance")); + if (BuilderGunItem.getMaxAoe(item) == 2) + spreadRangeInput.getToolTip().add(1, TextFormatting.RED + needsUpgradedAmplifier); Collections.addAll(widgets, replaceModeButton, replaceModeIndicator, spreadDiagonallyButton, spreadDiagonallyIndicator, spreadMaterialButton, spreadMaterialIndicator, spreadRangeLabel, diff --git a/src/main/java/com/simibubi/create/modules/curiosities/symmetry/client/SymmetryWandModel.java b/src/main/java/com/simibubi/create/modules/curiosities/symmetry/client/SymmetryWandModel.java index 837850453..2f9ed2609 100644 --- a/src/main/java/com/simibubi/create/modules/curiosities/symmetry/client/SymmetryWandModel.java +++ b/src/main/java/com/simibubi/create/modules/curiosities/symmetry/client/SymmetryWandModel.java @@ -1,5 +1,8 @@ package com.simibubi.create.modules.curiosities.symmetry.client; +import java.util.Arrays; +import java.util.List; + import com.simibubi.create.foundation.block.CustomRenderItemBakedModel; import net.minecraft.client.renderer.model.IBakedModel; @@ -14,6 +17,10 @@ public class SymmetryWandModel extends CustomRenderItemBakedModel { super(template); } + public static List getCustomModelLocations() { + return Arrays.asList("symmetry_wand_core", "symmetry_wand_bits"); + } + @Override public CustomRenderItemBakedModel loadPartials(ModelBakeEvent event) { this.core = loadCustomModel(event, "symmetry_wand_core"); diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index ced147a9a..c343548c8 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -4,7 +4,7 @@ loaderVersion="[28,)" [[mods]] modId="create" -version="0.1.1" +version="0.1.1a" displayName="Create" #updateJSONURL="" authors="simibubi" diff --git a/src/main/resources/assets/create/lang/en_us.json b/src/main/resources/assets/create/lang/en_us.json index 7bf698b09..96846b791 100644 --- a/src/main/resources/assets/create/lang/en_us.json +++ b/src/main/resources/assets/create/lang/en_us.json @@ -201,6 +201,7 @@ "create.gui.blockzapper.searchDiagonal": "Follow Diagonals", "create.gui.blockzapper.searchFuzzy": "Ignore Material Borders", "create.gui.blockzapper.range": "Spread Range", + "create.gui.blockzapper.needsUpgradedAmplifier": "Requires Upgraded Amplifier", "create.gui.blockzapper.patternSection": "Patterns", "create.gui.blockzapper.pattern.solid": "Solid", "create.gui.blockzapper.pattern.checkered": "Checkerboard", diff --git a/src/main/resources/assets/create/models/item/placement_handgun.json b/src/main/resources/assets/create/models/item/placement_handgun.json index e617ba80c..b832d20e5 100644 --- a/src/main/resources/assets/create/models/item/placement_handgun.json +++ b/src/main/resources/assets/create/models/item/placement_handgun.json @@ -29,66 +29,37 @@ } }, "textures": { - "0": "block/anvil", - "1": "block/gray_concrete_powder", - "2": "block/white_concrete_powder", - "3": "block/white_stained_glass", - "4": "block/obsidian" + "smooth_stone_slab_side": "block/smooth_stone_slab_side", + "4": "minecraft:block/obsidian", + "particle": "block/obsidian" }, "elements": [ { "name": "Grip", - "from": [ 7.0, 1.0, 12.0 ], - "to": [ 9.0, 5.0, 15.0 ], - "rotation": { "origin": [ 8.0, 2.0, 14.0 ], "axis": "x", "angle": -22.5 }, + "from": [ 7.1, 1, 12 ], + "to": [ 8.9, 5, 15 ], + "rotation": { "origin": [ 8, 2, 14 ], "axis": "x", "angle": -22.5 }, "faces": { - "north": { "texture": "#0", "uv": [ 0.0, 0.0, 2.0, 4.0 ] }, - "east": { "texture": "#0", "uv": [ 0.0, 0.0, 3.0, 4.0 ] }, - "south": { "texture": "#0", "uv": [ 0.0, 0.0, 2.0, 4.0 ] }, - "west": { "texture": "#0", "uv": [ 0.0, 0.0, 3.0, 4.0 ] }, - "up": { "texture": "#0", "uv": [ 0.0, 0.0, 2.0, 3.0 ] }, - "down": { "texture": "#0", "uv": [ 0.0, 0.0, 2.0, 3.0 ] } - } - }, - { - "name": "Connector", - "from": [ 6.499999992549419, 4.0, 7.300000004470348 ], - "to": [ 9.49999999254942, 5.0, 14.300000004470348 ], - "faces": { - "north": { "texture": "#0", "uv": [ 0.0, 0.0, 3.0, 1.0 ] }, - "east": { "texture": "#0", "uv": [ 0.0, 0.0, 7.0, 1.0 ] }, - "south": { "texture": "#0", "uv": [ 0.0, 0.0, 3.0, 1.0 ] }, - "west": { "texture": "#0", "uv": [ 0.0, 0.0, 7.0, 1.0 ] }, - "up": { "texture": "#0", "uv": [ 0.0, 0.0, 3.0, 7.0 ] }, - "down": { "texture": "#0", "uv": [ 0.0, 0.0, 3.0, 7.0 ] } + "north": { "texture": "#smooth_stone_slab_side", "uv": [ 5, 7, 6.8, 11 ] }, + "east": { "texture": "#smooth_stone_slab_side", "uv": [ 13, 7, 16, 11 ] }, + "south": { "texture": "#smooth_stone_slab_side", "uv": [ 7, 7, 8.8, 11 ] }, + "west": { "texture": "#smooth_stone_slab_side", "uv": [ 16, 7, 13, 11 ] }, + "up": { "texture": "#smooth_stone_slab_side", "uv": [ 5, 2, 6.8, 5 ] }, + "down": { "texture": "#smooth_stone_slab_side", "uv": [ 7, 11, 8.8, 14 ] } } }, { "name": "Trigger", - "from": [ 7.499999992549419, 3.0, 11.0 ], - "to": [ 8.49999999254942, 6.0, 13.0 ], - "rotation": { "origin": [ 8.0, 2.0, 14.0 ], "axis": "x", "angle": -22.5 }, + "from": [ 7.5, 3, 11 ], + "to": [ 8.5, 6, 13 ], + "rotation": { "origin": [ 8, 2, 14 ], "axis": "x", "angle": -22.5 }, "faces": { - "north": { "texture": "#4", "uv": [ 0.0, 0.0, 1.0, 3.0 ] }, - "east": { "texture": "#4", "uv": [ 0.0, 0.0, 2.0, 3.0 ] }, - "south": { "texture": "#4", "uv": [ 0.0, 0.0, 1.0, 3.0 ] }, - "west": { "texture": "#4", "uv": [ 0.0, 0.0, 2.0, 3.0 ] }, - "up": { "texture": "#4", "uv": [ 0.0, 0.0, 1.0, 2.0 ] }, - "down": { "texture": "#4", "uv": [ 0.0, 0.0, 1.0, 2.0 ] } - } - }, - { - "name": "Rod Back Cap", - "from": [ 6.799999997019768, 3.800000011920929, 14.0 ], - "to": [ 9.200000002980232, 6.200000017881393, 15.0 ], - "rotation": { "origin": [ 8.0, 5.0, 8.0 ], "axis": "z", "angle": -45.0 }, - "faces": { - "north": { "texture": "#0", "uv": [ 0.0, 0.0, 2.0, 2.0 ] }, - "east": { "texture": "#0", "uv": [ 0.0, 0.0, 1.0, 2.4000000059604645 ] }, - "south": { "texture": "#0", "uv": [ 0.0, 0.0, 2.0, 2.0 ] }, - "west": { "texture": "#0", "uv": [ 0.0, 0.0, 1.0, 2.4000000059604645 ] }, - "up": { "texture": "#0", "uv": [ 0.0, 0.0, 2.4000000059604645, 1.0 ] }, - "down": { "texture": "#0", "uv": [ 0.0, 0.0, 2.4000000059604645, 1.0 ] } + "north": { "texture": "#4", "uv": [ 6, 4, 7, 7 ] }, + "east": { "texture": "#4", "uv": [ 6, 4, 8, 7 ] }, + "south": { "texture": "#4", "uv": [ 6, 4, 7, 7 ] }, + "west": { "texture": "#4", "uv": [ 5, 4, 7, 7 ] }, + "up": { "texture": "#4", "uv": [ 6, 6, 7, 8 ] }, + "down": { "texture": "#4", "uv": [ 5, 6, 6, 8 ] } } } ] diff --git a/src/main/resources/assets/create/models/item/placement_handgun/accelerator.json b/src/main/resources/assets/create/models/item/placement_handgun/accelerator.json new file mode 100644 index 000000000..4f830cfed --- /dev/null +++ b/src/main/resources/assets/create/models/item/placement_handgun/accelerator.json @@ -0,0 +1,63 @@ +{ + "__comment": "Model generated using MrCrayfish's Model Creator (http://mrcrayfish.com/modelcreator/)", + "parent": "create:item/placement_handgun", + "textures": { + "cog": "minecraft:block/stripped_spruce_log" + }, + "elements": [ + { + "name": "Cog", + "from": [ 7.5, 3, 12 ], + "to": [ 8.5, 8, 14 ], + "faces": { + "north": { "texture": "#cog", "uv": [ 6, 7, 8, 12 ] }, + "east": { "texture": "#cog", "uv": [ 5, 3, 7, 8 ] }, + "south": { "texture": "#cog", "uv": [ 4, 4, 5, 9 ] }, + "west": { "texture": "#cog", "uv": [ 4, 6, 6, 11 ] }, + "up": { "texture": "#cog", "uv": [ 4, 6, 5, 8 ] }, + "down": { "texture": "#cog", "uv": [ 5, 6, 6, 8 ] } + } + }, + { + "name": "Cog", + "from": [ 7.5, 3, 12 ], + "to": [ 8.5, 8, 14 ], + "rotation": { "origin": [ 8, 5.5, 8 ], "axis": "z", "angle": 45.0 }, + "faces": { + "north": { "texture": "#cog", "uv": [ 6, 7, 8, 12 ] }, + "east": { "texture": "#cog", "uv": [ 5, 3, 7, 8 ] }, + "south": { "texture": "#cog", "uv": [ 4, 4, 5, 9 ] }, + "west": { "texture": "#cog", "uv": [ 4, 6, 6, 11 ] }, + "up": { "texture": "#cog", "uv": [ 4, 6, 5, 8 ] }, + "down": { "texture": "#cog", "uv": [ 5, 6, 6, 8 ] } + } + }, + { + "name": "Cog", + "from": [ 7.5, 3, 12 ], + "to": [ 8.5, 8, 14 ], + "rotation": { "origin": [ 8, 5.5, 8 ], "axis": "z", "angle": -45.0 }, + "faces": { + "north": { "texture": "#cog", "uv": [ 6, 7, 8, 12 ] }, + "east": { "texture": "#cog", "uv": [ 5, 3, 7, 8 ] }, + "south": { "texture": "#cog", "uv": [ 4, 4, 5, 9 ] }, + "west": { "texture": "#cog", "uv": [ 4, 6, 6, 11 ] }, + "up": { "texture": "#cog", "uv": [ 4, 6, 5, 8 ] }, + "down": { "texture": "#cog", "uv": [ 5, 6, 6, 8 ] } + } + }, + { + "name": "Cog", + "from": [ 5.5, 5, 12 ], + "to": [ 10.5, 6, 14 ], + "faces": { + "north": { "texture": "#cog", "uv": [ 6, 7, 8, 12 ] }, + "east": { "texture": "#cog", "uv": [ 5, 3, 7, 4 ] }, + "south": { "texture": "#cog", "uv": [ 4, 4, 9, 5 ] }, + "west": { "texture": "#cog", "uv": [ 4, 6, 6, 7 ] }, + "up": { "texture": "#cog", "uv": [ 4, 6, 5, 8 ] }, + "down": { "texture": "#cog", "uv": [ 5, 6, 6, 8 ] } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/item/placement_handgun/amplifier_core.json b/src/main/resources/assets/create/models/item/placement_handgun/amplifier_core.json new file mode 100644 index 000000000..51b3a7152 --- /dev/null +++ b/src/main/resources/assets/create/models/item/placement_handgun/amplifier_core.json @@ -0,0 +1,33 @@ +{ + "__comment": "Model generated using MrCrayfish's Model Creator (http://mrcrayfish.com/modelcreator/)", + "parent": "create:item/placement_handgun", + "textures": { + "2": "block/white_concrete_powder", + "3": "block/white_stained_glass" + }, + "elements": [ + { + "name": "Amplifier Core", + "from": [ 7.3, 3, 3.7 ], + "to": [ 8.7, 4, 7.7 ], + "faces": { + "north": { "texture": "#2", "uv": [ 6, 5, 7, 6 ] }, + "east": { "texture": "#2", "uv": [ 3, 5, 7, 6 ] }, + "west": { "texture": "#2", "uv": [ 3, 7, 7, 8 ] } + } + }, + { + "name": "Amplifier Core Glow", + "from": [ 7.1, 2.6, 3.5 ], + "to": [ 8.9, 4.4, 7.4 ], + "faces": { + "north": { "texture": "#3", "uv": [ 6, 7, 7.8, 8.8 ] }, + "east": { "texture": "#3", "uv": [ 3, 7, 6.9, 8.8 ] }, + "south": { "texture": "#3", "uv": [ 5, 7, 6.8, 8.8 ] }, + "west": { "texture": "#3", "uv": [ 4, 7, 7.9, 8.8 ] }, + "up": { "texture": "#3", "uv": [ 7, 3, 8.8, 6.9 ] }, + "down": { "texture": "#3", "uv": [ 7, 4, 8.8, 7.9 ] } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/item/placement_handgun/body.json b/src/main/resources/assets/create/models/item/placement_handgun/body.json index 57af707b1..b0db3229c 100644 --- a/src/main/resources/assets/create/models/item/placement_handgun/body.json +++ b/src/main/resources/assets/create/models/item/placement_handgun/body.json @@ -3,25 +3,61 @@ "ambientocclusion": true, "parent": "create:item/placement_handgun", "textures": { - "0": "block/anvil", - "1": "block/gray_concrete_powder", - "2": "block/white_concrete_powder", - "3": "block/white_stained_glass", - "4": "block/obsidian" + "0": "create:block/andesite_alloy_mesh" }, "elements": [ { - "name": "Rod Back", - "from": [ 7.0, 4.000000014901161, 7.0 ], - "to": [ 9.0, 6.000000014901161, 14.0 ], - "rotation": { "origin": [ 8.0, 5.0, 8.0 ], "axis": "z", "angle": -45.0 }, + "name": "Connector", + "from": [ 7, 4, 2 ], + "to": [ 9, 5, 12 ], "faces": { - "north": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] }, - "east": { "texture": "#1", "uv": [ 0.0, 0.0, 7.0, 2.0 ] }, - "south": { "texture": "#1", "uv": [ 6.0, 7.0, 8.0, 9.0 ] }, - "west": { "texture": "#1", "uv": [ 4.0, 3.0, 11.0, 5.0 ] }, - "up": { "texture": "#1", "uv": [ 6.0, 5.0, 8.0, 12.0 ] }, - "down": { "texture": "#1", "uv": [ 8.0, 6.0, 10.0, 13.0 ] } + "north": { "texture": "#0", "uv": [ 0, 0, 2, 1 ] }, + "east": { "texture": "#0", "uv": [ 0, 0, 10, 1 ] }, + "south": { "texture": "#0", "uv": [ 0, 0, 2, 1 ] }, + "west": { "texture": "#0", "uv": [ 0, 0, 10, 1 ] }, + "up": { "texture": "#0", "uv": [ 0, 0, 2, 10 ] }, + "down": { "texture": "#0", "uv": [ 0, 0, 2, 10 ] } + } + }, + { + "name": "Rod Back Cap", + "from": [ 7, 4.5, 14 ], + "to": [ 9, 6.5, 15 ], + "rotation": { "origin": [ 8, 5.5, 8 ], "axis": "z", "angle": -45.0 }, + "faces": { + "north": { "texture": "#0", "uv": [ 0, 0, 2, 2 ] }, + "east": { "texture": "#0", "uv": [ 0, 0, 1, 2 ] }, + "south": { "texture": "#0", "uv": [ 0, 0, 2, 2 ] }, + "west": { "texture": "#0", "uv": [ 0, 0, 1, 2 ] }, + "up": { "texture": "#0", "uv": [ 0, 0, 2, 1 ] }, + "down": { "texture": "#0", "uv": [ 0, 0, 2, 1 ] } + } + }, + { + "name": "Connector", + "from": [ 7, 6, 2 ], + "to": [ 9, 7, 12 ], + "faces": { + "north": { "texture": "#0", "uv": [ 0, 0, 2, 1 ] }, + "east": { "texture": "#0", "uv": [ 0, 0, 10, 1 ] }, + "south": { "texture": "#0", "uv": [ 0, 0, 2, 1 ] }, + "west": { "texture": "#0", "uv": [ 0, 0, 10, 1 ] }, + "up": { "texture": "#0", "uv": [ 0, 0, 2, 10 ] }, + "down": { "texture": "#0", "uv": [ 0, 0, 2, 10 ] } + } + }, + { + "name": "Rod Back Cap", + "from": [ 7, 4.5, 11 ], + "to": [ 9, 6.5, 12 ], + "rotation": { "origin": [ 8, 5.5, 8 ], "axis": "z", "angle": -45.0 }, + "faces": { + "north": { "texture": "#0", "uv": [ 0, 0, 2, 2 ] }, + "east": { "texture": "#0", "uv": [ 0, 0, 1, 2 ] }, + "south": { "texture": "#0", "uv": [ 0, 0, 2, 2 ] }, + "west": { "texture": "#0", "uv": [ 0, 0, 1, 2 ] }, + "up": { "texture": "#0", "uv": [ 0, 0, 2, 1 ] }, + "down": { "texture": "#0", "uv": [ 0, 0, 2, 1 ] } } } ] diff --git a/src/main/resources/assets/create/models/item/placement_handgun/chorus_accelerator.json b/src/main/resources/assets/create/models/item/placement_handgun/chorus_accelerator.json index 3146f34ab..0172df56b 100644 --- a/src/main/resources/assets/create/models/item/placement_handgun/chorus_accelerator.json +++ b/src/main/resources/assets/create/models/item/placement_handgun/chorus_accelerator.json @@ -2,51 +2,61 @@ "__comment": "Model generated using MrCrayfish's Model Creator (http://mrcrayfish.com/modelcreator/)", "parent": "create:item/placement_handgun", "textures": { - "0": "block/anvil", - "1": "block/gray_concrete_powder", - "2": "block/white_concrete_powder", - "3": "block/white_stained_glass", - "4": "block/obsidian", - "5": "block/purpur_pillar" + "cog": "minecraft:block/purpur_block" }, "elements": [ { - "name": "Accelerator", - "from": [ 6.499999992549419, 5.0, 10.300000004470348 ], - "to": [ 9.49999999254942, 6.0, 15.300000004470348 ], + "name": "Cog", + "from": [ 7.5, 3, 12 ], + "to": [ 8.5, 8, 14 ], "faces": { - "north": { "texture": "#5", "uv": [ 7.0, 1.0, 10.0, 2.0 ] }, - "south": { "texture": "#5", "uv": [ 6.0, 3.0, 9.0, 4.0 ] }, - "up": { "texture": "#5", "uv": [ 6.0, 10.0, 9.0, 15.0 ] }, - "down": { "texture": "#5", "uv": [ 7.0, 0.0, 10.0, 5.0 ] } + "north": { "texture": "#cog", "uv": [ 6, 7, 8, 12 ] }, + "east": { "texture": "#cog", "uv": [ 5, 3, 7, 8 ] }, + "south": { "texture": "#cog", "uv": [ 4, 4, 5, 9 ] }, + "west": { "texture": "#cog", "uv": [ 4, 6, 6, 11 ] }, + "up": { "texture": "#cog", "uv": [ 4, 6, 5, 8 ] }, + "down": { "texture": "#cog", "uv": [ 5, 6, 6, 8 ] } } }, { - "name": "Accelerator Connector", - "from": [ 6.4000000059604645, 7.300000004470348, 10.300000004470348 ], - "to": [ 9.600000008940697, 8.699999995529652, 11.699999995529652 ], - "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "x", "angle": 45.0 }, + "name": "Cog", + "from": [ 7.5, 3, 12 ], + "to": [ 8.5, 8, 14 ], + "rotation": { "origin": [ 8, 5.5, 8 ], "axis": "z", "angle": 45.0 }, "faces": { - "north": { "texture": "#0", "uv": [ 13.0, 1.0, 15.0, 3.0 ] }, - "east": { "texture": "#0", "uv": [ 4.0, 2.0, 5.399999991059303, 3.3999999910593033 ] }, - "south": { "texture": "#0", "uv": [ 1.0, 6.0, 4.200000002980232, 7.399999991059303 ] }, - "west": { "texture": "#0", "uv": [ 4.0, 2.0, 5.399999991059303, 3.3999999910593033 ] }, - "up": { "texture": "#0", "uv": [ 5.0, 6.0, 8.200000002980232, 7.399999991059303 ] }, - "down": { "texture": "#0", "uv": [ 4.0, 4.0, 7.200000002980232, 5.399999991059303 ] } + "north": { "texture": "#cog", "uv": [ 6, 7, 8, 12 ] }, + "east": { "texture": "#cog", "uv": [ 5, 3, 7, 8 ] }, + "south": { "texture": "#cog", "uv": [ 4, 4, 5, 9 ] }, + "west": { "texture": "#cog", "uv": [ 4, 6, 6, 11 ] }, + "up": { "texture": "#cog", "uv": [ 4, 6, 5, 8 ] }, + "down": { "texture": "#cog", "uv": [ 5, 6, 6, 8 ] } } }, { - "name": "Accelerator Back Cap", - "from": [ 7.100000001490116, 4.3000000193715096, 15.0 ], - "to": [ 8.699999995529652, 5.900000013411045, 15.399999991059303 ], - "rotation": { "origin": [ 8.0, 5.0, 8.0 ], "axis": "z", "angle": -45.0 }, + "name": "Cog", + "from": [ 7.5, 3, 12 ], + "to": [ 8.5, 8, 14 ], + "rotation": { "origin": [ 8, 5.5, 8 ], "axis": "z", "angle": -45.0 }, "faces": { - "north": { "texture": "#5", "uv": [ 7.0, 7.0, 9.0, 9.0 ] }, - "east": { "texture": "#5", "uv": [ 12.0, 4.0, 13.0, 6.4000000059604645 ] }, - "south": { "texture": "#5", "uv": [ 11.0, 5.0, 13.0, 7.0 ] }, - "west": { "texture": "#5", "uv": [ 6.0, 2.0, 7.0, 4.4000000059604645 ] }, - "up": { "texture": "#5", "uv": [ 7.0, 6.0, 9.400000005960464, 7.0 ] }, - "down": { "texture": "#5", "uv": [ 9.0, 0.0, 11.400000005960464, 1.0 ] } + "north": { "texture": "#cog", "uv": [ 6, 7, 8, 12 ] }, + "east": { "texture": "#cog", "uv": [ 5, 3, 7, 8 ] }, + "south": { "texture": "#cog", "uv": [ 4, 4, 5, 9 ] }, + "west": { "texture": "#cog", "uv": [ 4, 6, 6, 11 ] }, + "up": { "texture": "#cog", "uv": [ 4, 6, 5, 8 ] }, + "down": { "texture": "#cog", "uv": [ 5, 6, 6, 8 ] } + } + }, + { + "name": "Cog", + "from": [ 5.5, 5, 12 ], + "to": [ 10.5, 6, 14 ], + "faces": { + "north": { "texture": "#cog", "uv": [ 6, 7, 8, 12 ] }, + "east": { "texture": "#cog", "uv": [ 5, 3, 7, 4 ] }, + "south": { "texture": "#cog", "uv": [ 4, 4, 9, 5 ] }, + "west": { "texture": "#cog", "uv": [ 4, 6, 6, 7 ] }, + "up": { "texture": "#cog", "uv": [ 4, 6, 5, 8 ] }, + "down": { "texture": "#cog", "uv": [ 5, 6, 6, 8 ] } } } ] diff --git a/src/main/resources/assets/create/models/item/placement_handgun/chorus_accelerator_core.json b/src/main/resources/assets/create/models/item/placement_handgun/chorus_accelerator_core.json deleted file mode 100644 index 9c69cd6c1..000000000 --- a/src/main/resources/assets/create/models/item/placement_handgun/chorus_accelerator_core.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "__comment": "Model generated using MrCrayfish's Model Creator (http://mrcrayfish.com/modelcreator/)", - "parent": "create:item/placement_handgun", - "textures": { - "0": "block/anvil", - "1": "block/gray_concrete_powder", - "2": "block/white_concrete_powder", - "3": "block/white_stained_glass", - "4": "block/obsidian", - "5": "block/purpur_pillar" - }, - "elements": [ - { - "name": "Accelerator Core", - "from": [ 6.499999992549419, 5.0, 10.300000004470348 ], - "to": [ 9.49999999254942, 6.0, 15.300000004470348 ], - "faces": { - "east": { "texture": "#2", "uv": [ 4.0, 2.0, 9.0, 3.0 ] }, - "west": { "texture": "#2", "uv": [ 7.0, 2.0, 12.0, 3.0 ] } - } - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/item/placement_handgun/chorus_amplifier.json b/src/main/resources/assets/create/models/item/placement_handgun/chorus_amplifier.json index 5f6539c6d..d2536deee 100644 --- a/src/main/resources/assets/create/models/item/placement_handgun/chorus_amplifier.json +++ b/src/main/resources/assets/create/models/item/placement_handgun/chorus_amplifier.json @@ -2,69 +2,33 @@ "__comment": "Model generated using MrCrayfish's Model Creator (http://mrcrayfish.com/modelcreator/)", "parent": "create:item/placement_handgun", "textures": { - "0": "block/anvil", - "1": "block/gray_concrete_powder", - "2": "block/white_concrete_powder", - "3": "block/white_stained_glass", - "4": "block/obsidian", - "5": "block/purpur_pillar", - "6": "block/redstone_block" + "0": "create:block/chorus_chrome_mesh" }, "elements": [ { - "name": "Amplifier", - "from": [ 10.000000014901161, 4.0, 4.0 ], - "to": [ 11.000000014901161, 5.0, 10.0 ], - "rotation": { "origin": [ 11.0, 4.0, 8.0 ], "axis": "z", "angle": 45.0 }, + "name": "Amplifier Connector", + "from": [ 7, 2, 3 ], + "to": [ 9, 3, 8 ], "faces": { - "north": { "texture": "#5", "uv": [ 1.0, 2.0, 2.0, 3.0 ] }, - "east": { "texture": "#5", "uv": [ 10.0, 0.0, 16.0, 1.0 ] }, - "south": { "texture": "#5", "uv": [ 7.0, 7.0, 8.0, 8.0 ] }, - "west": { "texture": "#5", "uv": [ 0.0, 1.0, 6.0, 2.0 ] }, - "up": { "texture": "#5", "uv": [ 2.0, 0.0, 1.0, 6.0 ] }, - "down": { "texture": "#5", "uv": [ 13.0, 10.0, 14.0, 16.0 ] } + "north": { "texture": "#0", "uv": [ 1, 3, 3, 4 ] }, + "east": { "texture": "#0", "uv": [ 11, 5, 16, 6 ] }, + "south": { "texture": "#0", "uv": [ 0, 3, 2, 4 ] }, + "west": { "texture": "#0", "uv": [ 0, 5, 5, 6 ] }, + "up": { "texture": "#0", "uv": [ 0, 3, 5, 5 ], "rotation": 90 }, + "down": { "texture": "#0", "uv": [ 0, 3, 5, 5 ], "rotation": 270 } } }, { "name": "Amplifier Connector", - "from": [ 9.800000011920929, 5.0, 8.0 ], - "to": [ 10.800000011920929, 8.0, 9.0 ], - "rotation": { "origin": [ 11.0, 4.0, 8.0 ], "axis": "z", "angle": 45.0 }, + "from": [ 7, 3, 7 ], + "to": [ 9, 4, 8 ], "faces": { - "north": { "texture": "#0", "uv": [ 0.0, 0.0, 1.0, 3.0 ] }, - "east": { "texture": "#0", "uv": [ 6.0, 3.0, 7.0, 6.0 ] }, - "south": { "texture": "#0", "uv": [ 0.0, 0.0, 1.0, 3.0 ] }, - "west": { "texture": "#0", "uv": [ 10.0, 2.0, 14.0, 3.0 ] }, - "up": { "texture": "#0", "uv": [ 15.0, 11.0, 14.0, 15.0 ] }, - "down": { "texture": "#0", "uv": [ 10.0, 3.0, 11.0, 4.0 ] } - } - }, - { - "name": "Amplifier Connector 2", - "from": [ 7.800000011920929, 7.0, 8.0 ], - "to": [ 9.800000011920929, 8.0, 9.0 ], - "rotation": { "origin": [ 11.0, 4.0, 8.0 ], "axis": "z", "angle": 45.0 }, - "faces": { - "north": { "texture": "#0", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "east": { "texture": "#0", "uv": [ 6.0, 3.0, 7.0, 4.0 ] }, - "south": { "texture": "#0", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "west": { "texture": "#0", "uv": [ 10.0, 2.0, 13.0, 3.0 ] }, - "up": { "texture": "#0", "uv": [ 7.0, 6.0, 9.0, 7.0 ] }, - "down": { "texture": "#0", "uv": [ 10.0, 3.0, 12.0, 4.0 ] } - } - }, - { - "name": "Amplifier 2", - "from": [ 5.000000014901161, 3.0, 4.0 ], - "to": [ 6.000000014901161, 4.0, 10.0 ], - "rotation": { "origin": [ 5.0, 4.0, 8.0 ], "axis": "z", "angle": 45.0 }, - "faces": { - "north": { "texture": "#5", "uv": [ 1.0, 2.0, 2.0, 3.0 ] }, - "east": { "texture": "#5", "uv": [ 10.0, 0.0, 16.0, 1.0 ] }, - "south": { "texture": "#5", "uv": [ 7.0, 7.0, 8.0, 8.0 ] }, - "west": { "texture": "#5", "uv": [ 0.0, 1.0, 6.0, 2.0 ] }, - "up": { "texture": "#5", "uv": [ 2.0, 0.0, 1.0, 6.0 ] }, - "down": { "texture": "#5", "uv": [ 13.0, 10.0, 14.0, 16.0 ] } + "north": { "texture": "#0", "uv": [ 0, 0, 2, 1 ] }, + "east": { "texture": "#0", "uv": [ 0, 0, 1, 1 ] }, + "south": { "texture": "#0", "uv": [ 0, 0, 2, 1 ] }, + "west": { "texture": "#0", "uv": [ 0, 0, 1, 1 ] }, + "up": { "texture": "#0", "uv": [ 0, 0, 2, 1 ] }, + "down": { "texture": "#0", "uv": [ 0, 0, 2, 1 ] } } } ] diff --git a/src/main/resources/assets/create/models/item/placement_handgun/chorus_amplifier_core.json b/src/main/resources/assets/create/models/item/placement_handgun/chorus_amplifier_core.json deleted file mode 100644 index c54f8a7ce..000000000 --- a/src/main/resources/assets/create/models/item/placement_handgun/chorus_amplifier_core.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "__comment": "Model generated using MrCrayfish's Model Creator (http://mrcrayfish.com/modelcreator/)", - "parent": "create:item/placement_handgun", - "textures": { - "0": "block/anvil", - "1": "block/gray_concrete_powder", - "2": "block/white_concrete_powder", - "3": "block/white_stained_glass", - "4": "block/obsidian", - "5": "block/purpur_pillar", - "6": "block/redstone_block" - }, - "elements": [ - { - "name": "Amplifier Core", - "from": [ 10.000000014901161, 4.0, 3.0 ], - "to": [ 11.000000014901161, 5.0, 4.0 ], - "rotation": { "origin": [ 11.0, 4.0, 8.0 ], "axis": "z", "angle": 45.0 }, - "faces": { - "north": { "texture": "#2", "uv": [ 9.0, 8.0, 10.0, 9.0 ] }, - "east": { "texture": "#2", "uv": [ 10.0, 1.0, 11.0, 2.0 ] }, - "south": { "texture": "#2", "uv": [ 9.0, 8.0, 10.0, 9.0 ] }, - "west": { "texture": "#2", "uv": [ 3.0, 5.0, 4.0, 6.0 ] }, - "up": { "texture": "#2", "uv": [ 11.0, 1.0, 10.0, 2.0 ] }, - "down": { "texture": "#2", "uv": [ 13.0, 10.0, 14.0, 11.0 ] } - } - }, - { - "name": "Amplifier Core 2", - "from": [ 5.000000014901161, 3.0, 3.0 ], - "to": [ 6.000000014901161, 4.0, 4.0 ], - "rotation": { "origin": [ 5.0, 4.0, 8.0 ], "axis": "z", "angle": 45.0 }, - "faces": { - "north": { "texture": "#2", "uv": [ 9.0, 8.0, 10.0, 9.0 ] }, - "east": { "texture": "#2", "uv": [ 10.0, 1.0, 11.0, 2.0 ] }, - "south": { "texture": "#2", "uv": [ 9.0, 8.0, 10.0, 9.0 ] }, - "west": { "texture": "#2", "uv": [ 3.0, 5.0, 4.0, 6.0 ] }, - "up": { "texture": "#2", "uv": [ 11.0, 1.0, 10.0, 2.0 ] }, - "down": { "texture": "#2", "uv": [ 13.0, 10.0, 14.0, 11.0 ] } - } - }, - { - "name": "Amplifier Glow", - "from": [ 9.8, 3.7999999970197678, 2.7999999970197678 ], - "to": [ 11.200000005960465, 5.200000002980232, 4.200000002980232 ], - "rotation": { "origin": [ 11.0, 4.0, 8.0 ], "axis": "z", "angle": 45.0 }, - "faces": { - "north": { "texture": "#3", "uv": [ 7.0, 7.0, 9.0, 9.0 ] }, - "east": { "texture": "#3", "uv": [ 7.0, 7.0, 9.0, 9.0 ] }, - "south": { "texture": "#3", "uv": [ 7.0, 7.0, 9.0, 9.0 ] }, - "west": { "texture": "#3", "uv": [ 6.0, 7.0, 8.0, 9.0 ] }, - "up": { "texture": "#3", "uv": [ 7.0, 6.0, 9.0, 8.0 ] }, - "down": { "texture": "#3", "uv": [ 7.0, 7.0, 9.0, 9.0 ] } - } - }, - { - "name": "Amplifier Glow 2", - "from": [ 4.800000000000001, 2.7999999970197678, 2.7999999970197678 ], - "to": [ 6.200000005960465, 4.200000002980232, 4.200000002980232 ], - "rotation": { "origin": [ 5.0, 4.0, 8.0 ], "axis": "z", "angle": 45.0 }, - "faces": { - "north": { "texture": "#3", "uv": [ 7.0, 7.0, 9.0, 9.0 ] }, - "east": { "texture": "#3", "uv": [ 7.0, 7.0, 9.0, 9.0 ] }, - "south": { "texture": "#3", "uv": [ 7.0, 7.0, 9.0, 9.0 ] }, - "west": { "texture": "#3", "uv": [ 6.0, 7.0, 8.0, 9.0 ] }, - "up": { "texture": "#3", "uv": [ 7.0, 6.0, 9.0, 8.0 ] }, - "down": { "texture": "#3", "uv": [ 7.0, 7.0, 9.0, 9.0 ] } - } - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/item/placement_handgun/chorus_body.json b/src/main/resources/assets/create/models/item/placement_handgun/chorus_body.json index 51222f9b5..dd946f695 100644 --- a/src/main/resources/assets/create/models/item/placement_handgun/chorus_body.json +++ b/src/main/resources/assets/create/models/item/placement_handgun/chorus_body.json @@ -3,25 +3,61 @@ "ambientocclusion": true, "parent": "create:item/placement_handgun", "textures": { - "0": "block/anvil", - "1": "block/end_stone", - "2": "block/white_concrete_powder", - "3": "block/white_stained_glass", - "4": "block/obsidian" + "0": "create:block/chorus_chrome_mesh" }, "elements": [ { - "name": "Rod Back", - "from": [ 7.0, 4.000000014901161, 7.0 ], - "to": [ 9.0, 6.000000014901161, 14.0 ], - "rotation": { "origin": [ 8.0, 5.0, 8.0 ], "axis": "z", "angle": -45.0 }, + "name": "Connector", + "from": [ 7, 4, 2 ], + "to": [ 9, 5, 12 ], "faces": { - "north": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] }, - "east": { "texture": "#1", "uv": [ 0.0, 0.0, 7.0, 2.0 ] }, - "south": { "texture": "#1", "uv": [ 6.0, 7.0, 8.0, 9.0 ] }, - "west": { "texture": "#1", "uv": [ 4.0, 3.0, 11.0, 5.0 ] }, - "up": { "texture": "#1", "uv": [ 6.0, 5.0, 8.0, 12.0 ] }, - "down": { "texture": "#1", "uv": [ 8.0, 6.0, 10.0, 13.0 ] } + "north": { "texture": "#0", "uv": [ 6, 3, 8, 4 ] }, + "east": { "texture": "#0", "uv": [ 6, 5, 16, 6 ] }, + "south": { "texture": "#0", "uv": [ 8, 5, 10, 6 ] }, + "west": { "texture": "#0", "uv": [ 0, 5, 10, 6 ] }, + "up": { "texture": "#0", "uv": [ 3, 3, 13, 5 ], "rotation": 270 }, + "down": { "texture": "#0", "uv": [ 0, 4, 10, 6 ], "rotation": 270 } + } + }, + { + "name": "Rod Back Cap", + "from": [ 7, 4.5, 14 ], + "to": [ 9, 6.5, 15 ], + "rotation": { "origin": [ 8, 5.5, 8 ], "axis": "z", "angle": -45.0 }, + "faces": { + "north": { "texture": "#0", "uv": [ 0, 0, 2, 2 ] }, + "east": { "texture": "#0", "uv": [ 0, 0, 1, 2 ] }, + "south": { "texture": "#0", "uv": [ 0, 0, 2, 2 ] }, + "west": { "texture": "#0", "uv": [ 0, 0, 1, 2 ] }, + "up": { "texture": "#0", "uv": [ 0, 0, 2, 1 ] }, + "down": { "texture": "#0", "uv": [ 0, 0, 2, 1 ] } + } + }, + { + "name": "Connector", + "from": [ 7, 6, 2 ], + "to": [ 9, 7, 12 ], + "faces": { + "north": { "texture": "#0", "uv": [ 0, 8, 2, 9 ] }, + "east": { "texture": "#0", "uv": [ 0, 6, 10, 7 ] }, + "south": { "texture": "#0", "uv": [ 0, 7, 2, 8 ] }, + "west": { "texture": "#0", "uv": [ 0, 6, 10, 7 ] }, + "up": { "texture": "#0", "uv": [ 0, 6, 2, 16 ] }, + "down": { "texture": "#0", "uv": [ 0, 6, 2, 16 ] } + } + }, + { + "name": "Rod Back Cap", + "from": [ 7, 4.5, 11 ], + "to": [ 9, 6.5, 12 ], + "rotation": { "origin": [ 8, 5.5, 8 ], "axis": "z", "angle": -45.0 }, + "faces": { + "north": { "texture": "#0", "uv": [ 0, 0, 2, 2 ] }, + "east": { "texture": "#0", "uv": [ 0, 0, 1, 2 ] }, + "south": { "texture": "#0", "uv": [ 0, 0, 2, 2 ] }, + "west": { "texture": "#0", "uv": [ 0, 0, 1, 2 ] }, + "up": { "texture": "#0", "uv": [ 0, 0, 2, 1 ] }, + "down": { "texture": "#0", "uv": [ 0, 0, 2, 1 ] } } } ] diff --git a/src/main/resources/assets/create/models/item/placement_handgun/chorus_master.json b/src/main/resources/assets/create/models/item/placement_handgun/chorus_master.json deleted file mode 100644 index c99986a3e..000000000 --- a/src/main/resources/assets/create/models/item/placement_handgun/chorus_master.json +++ /dev/null @@ -1,341 +0,0 @@ -{ - "__comment": "Model generated using MrCrayfish's Model Creator (http://mrcrayfish.com/modelcreator/)", - "parent": "create:item/placement_handgun", - "textures": { - "0": "block/anvil", - "1": "block/gray_concrete_powder", - "2": "block/white_concrete_powder", - "3": "block/white_stained_glass", - "4": "block/obsidian", - "5": "block/gold_block", - "6": "block/redstone_block" - }, - "elements": [ - { - "name": "Grip", - "from": [ 7.0, 1.0, 12.0 ], - "to": [ 9.0, 5.0, 15.0 ], - "rotation": { "origin": [ 8.0, 2.0, 14.0 ], "axis": "x", "angle": -22.5 }, - "faces": { - "north": { "texture": "#0", "uv": [ 0.0, 0.0, 2.0, 4.0 ] }, - "east": { "texture": "#0", "uv": [ 0.0, 0.0, 3.0, 4.0 ] }, - "south": { "texture": "#0", "uv": [ 0.0, 0.0, 2.0, 4.0 ] }, - "west": { "texture": "#0", "uv": [ 0.0, 0.0, 3.0, 4.0 ] }, - "up": { "texture": "#0", "uv": [ 0.0, 0.0, 2.0, 3.0 ] }, - "down": { "texture": "#0", "uv": [ 0.0, 0.0, 2.0, 3.0 ] } - } - }, - { - "name": "Connector", - "from": [ 6.499999992549419, 4.0, 7.300000004470348 ], - "to": [ 9.49999999254942, 5.0, 14.300000004470348 ], - "faces": { - "north": { "texture": "#0", "uv": [ 0.0, 0.0, 3.0, 1.0 ] }, - "east": { "texture": "#0", "uv": [ 0.0, 0.0, 7.0, 1.0 ] }, - "south": { "texture": "#0", "uv": [ 0.0, 0.0, 3.0, 1.0 ] }, - "west": { "texture": "#0", "uv": [ 0.0, 0.0, 7.0, 1.0 ] }, - "up": { "texture": "#0", "uv": [ 0.0, 0.0, 3.0, 7.0 ] }, - "down": { "texture": "#0", "uv": [ 0.0, 0.0, 3.0, 7.0 ] } - } - }, - { - "name": "Rod Back", - "from": [ 7.0, 4.000000014901161, 7.0 ], - "to": [ 9.0, 6.000000014901161, 14.0 ], - "rotation": { "origin": [ 8.0, 5.0, 8.0 ], "axis": "z", "angle": -45.0 }, - "faces": { - "north": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] }, - "east": { "texture": "#1", "uv": [ 0.0, 0.0, 7.0, 2.0 ] }, - "south": { "texture": "#1", "uv": [ 6.0, 7.0, 8.0, 9.0 ] }, - "west": { "texture": "#1", "uv": [ 4.0, 3.0, 11.0, 5.0 ] }, - "up": { "texture": "#1", "uv": [ 6.0, 5.0, 8.0, 12.0 ] }, - "down": { "texture": "#1", "uv": [ 8.0, 6.0, 10.0, 13.0 ] } - } - }, - { - "name": "Rod Front", - "from": [ 7.300000004470348, 4.3000000193715096, 0.5000000074505806 ], - "to": [ 8.699999995529652, 5.700000010430813, 8.50000000745058 ], - "rotation": { "origin": [ 8.0, 5.0, 8.0 ], "axis": "z", "angle": -45.0 }, - "faces": { - "north": { "texture": "#2", "uv": [ 0.0, 0.0, 1.3999999910593033, 1.3999999910593033 ] }, - "east": { "texture": "#2", "uv": [ 0.0, 0.0, 8.0, 1.3999999910593033 ] }, - "south": { "texture": "#2", "uv": [ 0.0, 0.0, 1.3999999910593033, 1.3999999910593033 ] }, - "west": { "texture": "#2", "uv": [ 0.0, 0.0, 8.0, 1.3999999910593033 ] }, - "up": { "texture": "#2", "uv": [ 0.0, 0.0, 1.3999999910593033, 8.0 ] }, - "down": { "texture": "#2", "uv": [ 0.0, 0.0, 1.3999999910593033, 8.0 ] } - } - }, - { - "name": "Rod Glow", - "from": [ 6.899999998509884, 3.900000013411045, 0.0 ], - "to": [ 9.100000001490116, 6.100000016391277, 7.0 ], - "rotation": { "origin": [ 8.0, 5.0, 8.0 ], "axis": "z", "angle": -45.0 }, - "faces": { - "north": { "texture": "#3", "uv": [ 0.0, 0.0, 2.2000000029802322, 2.2000000029802322 ] }, - "east": { "texture": "#3", "uv": [ 0.0, 0.0, 7.0, 2.2000000029802322 ] }, - "south": { "texture": "#3", "uv": [ 0.0, 0.0, 2.2000000029802322, 2.2000000029802322 ] }, - "west": { "texture": "#3", "uv": [ 0.0, 0.0, 7.0, 2.2000000029802322 ] }, - "up": { "texture": "#3", "uv": [ 0.0, 0.0, 2.2000000029802322, 7.0 ] }, - "down": { "texture": "#3", "uv": [ 0.0, 0.0, 2.2000000029802322, 7.0 ] } - } - }, - { - "name": "Trigger", - "from": [ 7.499999992549419, 3.0, 11.0 ], - "to": [ 8.49999999254942, 6.0, 13.0 ], - "rotation": { "origin": [ 8.0, 2.0, 14.0 ], "axis": "x", "angle": -22.5 }, - "faces": { - "north": { "texture": "#4", "uv": [ 0.0, 0.0, 1.0, 3.0 ] }, - "east": { "texture": "#4", "uv": [ 0.0, 0.0, 2.0, 3.0 ] }, - "south": { "texture": "#4", "uv": [ 0.0, 0.0, 1.0, 3.0 ] }, - "west": { "texture": "#4", "uv": [ 0.0, 0.0, 2.0, 3.0 ] }, - "up": { "texture": "#4", "uv": [ 0.0, 0.0, 1.0, 2.0 ] }, - "down": { "texture": "#4", "uv": [ 0.0, 0.0, 1.0, 2.0 ] } - } - }, - { - "name": "Rod Back Cap", - "from": [ 6.799999997019768, 3.800000011920929, 14.0 ], - "to": [ 9.200000002980232, 6.200000017881393, 15.0 ], - "rotation": { "origin": [ 8.0, 5.0, 8.0 ], "axis": "z", "angle": -45.0 }, - "faces": { - "north": { "texture": "#0", "uv": [ 0.0, 0.0, 2.0, 2.0 ] }, - "east": { "texture": "#0", "uv": [ 0.0, 0.0, 1.0, 2.4000000059604645 ] }, - "south": { "texture": "#0", "uv": [ 0.0, 0.0, 2.0, 2.0 ] }, - "west": { "texture": "#0", "uv": [ 0.0, 0.0, 1.0, 2.4000000059604645 ] }, - "up": { "texture": "#0", "uv": [ 0.0, 0.0, 2.4000000059604645, 1.0 ] }, - "down": { "texture": "#0", "uv": [ 0.0, 0.0, 2.4000000059604645, 1.0 ] } - } - }, - { - "name": "Scope", - "from": [ 7.500000007450581, 6.0, 6.0 ], - "to": [ 8.50000000745058, 7.0, 12.0 ], - "faces": { - "north": { "texture": "#5", "uv": [ 15.0, 7.0, 16.0, 8.0 ] }, - "east": { "texture": "#5", "uv": [ 8.0, 15.0, 14.0, 16.0 ] }, - "south": { "texture": "#5", "uv": [ 15.0, 8.0, 16.0, 9.0 ] }, - "west": { "texture": "#5", "uv": [ 6.0, 15.0, 12.0, 16.0 ] }, - "up": { "texture": "#5", "uv": [ 15.0, 5.0, 16.0, 11.0 ] }, - "down": { "texture": "#5", "uv": [ 15.0, 4.0, 16.0, 10.0 ] } - } - }, - { - "name": "Scope Back", - "from": [ 7.200000002980232, 7.0, 10.0 ], - "to": [ 8.800000011920929, 9.0, 12.0 ], - "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "x", "angle": 45.0 }, - "faces": { - "north": { "texture": "#5", "uv": [ 13.0, 1.0, 15.0, 3.0 ] }, - "east": { "texture": "#5", "uv": [ 4.0, 2.0, 6.0, 4.0 ] }, - "south": { "texture": "#5", "uv": [ 1.0, 6.0, 2.6000000089406967, 8.0 ] }, - "west": { "texture": "#5", "uv": [ 4.0, 2.0, 6.0, 4.0 ] }, - "up": { "texture": "#5", "uv": [ 5.0, 6.0, 6.600000008940697, 8.0 ] }, - "down": { "texture": "#5", "uv": [ 4.0, 4.0, 5.600000008940697, 6.0 ] } - } - }, - { - "name": "ScopeTop", - "from": [ 7.0, 7.0, 9.0 ], - "to": [ 9.0, 9.0, 13.0 ], - "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "z", "angle": 45.0 }, - "faces": { - "north": { "texture": "#3", "uv": [ 0.0, 0.0, 2.0, 2.0 ] }, - "east": { "texture": "#5", "uv": [ 6.0, 3.0, 10.0, 5.0 ] }, - "south": { "texture": "#3", "uv": [ 0.0, 0.0, 2.0, 2.0 ] }, - "west": { "texture": "#5", "uv": [ 10.0, 2.0, 14.0, 3.0 ] }, - "up": { "texture": "#5", "uv": [ 15.0, 11.0, 14.0, 15.0 ] }, - "down": { "texture": "#5", "uv": [ 10.0, 3.0, 12.0, 7.0 ] } - } - }, - { - "name": "Amplifier", - "from": [ 10.000000014901161, 4.0, 4.0 ], - "to": [ 11.000000014901161, 5.0, 10.0 ], - "rotation": { "origin": [ 11.0, 4.0, 8.0 ], "axis": "z", "angle": 45.0 }, - "faces": { - "north": { "texture": "#5", "uv": [ 1.0, 2.0, 2.0, 3.0 ] }, - "east": { "texture": "#5", "uv": [ 10.0, 0.0, 16.0, 1.0 ] }, - "south": { "texture": "#5", "uv": [ 7.0, 7.0, 8.0, 8.0 ] }, - "west": { "texture": "#5", "uv": [ 0.0, 1.0, 6.0, 2.0 ] }, - "up": { "texture": "#5", "uv": [ 2.0, 0.0, 1.0, 6.0 ] }, - "down": { "texture": "#5", "uv": [ 13.0, 10.0, 14.0, 16.0 ] } - } - }, - { - "name": "Amplifier Connector", - "from": [ 9.800000011920929, 5.0, 8.0 ], - "to": [ 10.800000011920929, 8.0, 9.0 ], - "rotation": { "origin": [ 11.0, 4.0, 8.0 ], "axis": "z", "angle": 45.0 }, - "faces": { - "north": { "texture": "#0", "uv": [ 0.0, 0.0, 1.0, 3.0 ] }, - "east": { "texture": "#0", "uv": [ 6.0, 3.0, 7.0, 6.0 ] }, - "south": { "texture": "#0", "uv": [ 0.0, 0.0, 1.0, 3.0 ] }, - "west": { "texture": "#0", "uv": [ 10.0, 2.0, 14.0, 3.0 ] }, - "up": { "texture": "#0", "uv": [ 15.0, 11.0, 14.0, 15.0 ] }, - "down": { "texture": "#0", "uv": [ 10.0, 3.0, 11.0, 4.0 ] } - } - }, - { - "name": "Amplifier Glow", - "from": [ 9.8, 3.7999999970197678, 2.7999999970197678 ], - "to": [ 11.200000005960465, 5.200000002980232, 4.200000002980232 ], - "rotation": { "origin": [ 11.0, 4.0, 8.0 ], "axis": "z", "angle": 45.0 }, - "faces": { - "north": { "texture": "#3", "uv": [ 7.0, 7.0, 9.0, 9.0 ] }, - "east": { "texture": "#3", "uv": [ 7.0, 7.0, 9.0, 9.0 ] }, - "south": { "texture": "#3", "uv": [ 7.0, 7.0, 9.0, 9.0 ] }, - "west": { "texture": "#3", "uv": [ 6.0, 7.0, 8.0, 9.0 ] }, - "up": { "texture": "#3", "uv": [ 7.0, 6.0, 9.0, 8.0 ] }, - "down": { "texture": "#3", "uv": [ 7.0, 7.0, 9.0, 9.0 ] } - } - }, - { - "name": "Amplifier Core", - "from": [ 10.000000014901161, 4.0, 3.0 ], - "to": [ 11.000000014901161, 5.0, 4.0 ], - "rotation": { "origin": [ 11.0, 4.0, 8.0 ], "axis": "z", "angle": 45.0 }, - "faces": { - "north": { "texture": "#2", "uv": [ 9.0, 8.0, 10.0, 9.0 ] }, - "east": { "texture": "#2", "uv": [ 10.0, 1.0, 11.0, 2.0 ] }, - "south": { "texture": "#2", "uv": [ 9.0, 8.0, 10.0, 9.0 ] }, - "west": { "texture": "#2", "uv": [ 3.0, 5.0, 4.0, 6.0 ] }, - "up": { "texture": "#2", "uv": [ 11.0, 1.0, 10.0, 2.0 ] }, - "down": { "texture": "#2", "uv": [ 13.0, 10.0, 14.0, 11.0 ] } - } - }, - { - "name": "Retriever Back", - "from": [ 7.0, 2.0, 8.0 ], - "to": [ 9.0, 4.0, 9.0 ], - "rotation": { "origin": [ 8.0, 3.0, 7.0 ], "axis": "x", "angle": -22.5 }, - "faces": { - "north": { "texture": "#5", "uv": [ 12.0, 4.0, 14.0, 6.0 ] }, - "east": { "texture": "#5", "uv": [ 15.0, 8.0, 16.0, 10.0 ] }, - "south": { "texture": "#5", "uv": [ 1.0, 13.0, 3.0, 15.0 ] }, - "west": { "texture": "#5", "uv": [ 15.0, 7.0, 16.0, 9.0 ] }, - "up": { "texture": "#5", "uv": [ 3.0, 15.0, 5.0, 16.0 ] }, - "down": { "texture": "#5", "uv": [ 7.0, 15.0, 9.0, 16.0 ] } - } - }, - { - "name": "Accelerator", - "from": [ 6.499999992549419, 5.0, 10.300000004470348 ], - "to": [ 9.49999999254942, 6.0, 15.300000004470348 ], - "faces": { - "north": { "texture": "#5", "uv": [ 7.0, 1.0, 10.0, 2.0 ] }, - "south": { "texture": "#5", "uv": [ 6.0, 3.0, 9.0, 4.0 ] }, - "up": { "texture": "#5", "uv": [ 6.0, 10.0, 9.0, 15.0 ] }, - "down": { "texture": "#5", "uv": [ 7.0, 0.0, 10.0, 5.0 ] } - } - }, - { - "name": "Accelerator Core", - "from": [ 6.499999992549419, 5.0, 10.300000004470348 ], - "to": [ 9.49999999254942, 6.0, 15.300000004470348 ], - "faces": { - "east": { "texture": "#2", "uv": [ 4.0, 2.0, 9.0, 3.0 ] }, - "west": { "texture": "#2", "uv": [ 7.0, 2.0, 12.0, 3.0 ] } - } - }, - { - "name": "Accelerator Connector", - "from": [ 6.4000000059604645, 7.300000004470348, 10.300000004470348 ], - "to": [ 9.600000008940697, 8.699999995529652, 11.699999995529652 ], - "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "x", "angle": 45.0 }, - "faces": { - "north": { "texture": "#0", "uv": [ 13.0, 1.0, 15.0, 3.0 ] }, - "east": { "texture": "#0", "uv": [ 4.0, 2.0, 5.399999991059303, 3.3999999910593033 ] }, - "south": { "texture": "#0", "uv": [ 1.0, 6.0, 4.200000002980232, 7.399999991059303 ] }, - "west": { "texture": "#0", "uv": [ 4.0, 2.0, 5.399999991059303, 3.3999999910593033 ] }, - "up": { "texture": "#0", "uv": [ 5.0, 6.0, 8.200000002980232, 7.399999991059303 ] }, - "down": { "texture": "#0", "uv": [ 4.0, 4.0, 7.200000002980232, 5.399999991059303 ] } - } - }, - { - "name": "Accelerator Back Cap", - "from": [ 7.100000001490116, 4.3000000193715096, 15.0 ], - "to": [ 8.699999995529652, 5.900000013411045, 15.399999991059303 ], - "rotation": { "origin": [ 8.0, 5.0, 8.0 ], "axis": "z", "angle": -45.0 }, - "faces": { - "north": { "texture": "#5", "uv": [ 7.0, 7.0, 9.0, 9.0 ] }, - "east": { "texture": "#5", "uv": [ 12.0, 4.0, 13.0, 6.4000000059604645 ] }, - "south": { "texture": "#5", "uv": [ 11.0, 5.0, 13.0, 7.0 ] }, - "west": { "texture": "#5", "uv": [ 6.0, 2.0, 7.0, 4.4000000059604645 ] }, - "up": { "texture": "#5", "uv": [ 7.0, 6.0, 9.400000005960464, 7.0 ] }, - "down": { "texture": "#5", "uv": [ 9.0, 0.0, 11.400000005960464, 1.0 ] } - } - }, - { - "name": "Amplifier Connector 2", - "from": [ 7.800000011920929, 7.0, 8.0 ], - "to": [ 9.800000011920929, 8.0, 9.0 ], - "rotation": { "origin": [ 11.0, 4.0, 8.0 ], "axis": "z", "angle": 45.0 }, - "faces": { - "north": { "texture": "#0", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "east": { "texture": "#0", "uv": [ 6.0, 3.0, 7.0, 4.0 ] }, - "south": { "texture": "#0", "uv": [ 0.0, 0.0, 2.0, 1.0 ] }, - "west": { "texture": "#0", "uv": [ 10.0, 2.0, 13.0, 3.0 ] }, - "up": { "texture": "#0", "uv": [ 7.0, 6.0, 9.0, 7.0 ] }, - "down": { "texture": "#0", "uv": [ 10.0, 3.0, 12.0, 4.0 ] } - } - }, - { - "name": "Amplifier 2", - "from": [ 5.000000014901161, 3.0, 4.0 ], - "to": [ 6.000000014901161, 4.0, 10.0 ], - "rotation": { "origin": [ 5.0, 4.0, 8.0 ], "axis": "z", "angle": 45.0 }, - "faces": { - "north": { "texture": "#5", "uv": [ 1.0, 2.0, 2.0, 3.0 ] }, - "east": { "texture": "#5", "uv": [ 10.0, 0.0, 16.0, 1.0 ] }, - "south": { "texture": "#5", "uv": [ 7.0, 7.0, 8.0, 8.0 ] }, - "west": { "texture": "#5", "uv": [ 0.0, 1.0, 6.0, 2.0 ] }, - "up": { "texture": "#5", "uv": [ 2.0, 0.0, 1.0, 6.0 ] }, - "down": { "texture": "#5", "uv": [ 13.0, 10.0, 14.0, 16.0 ] } - } - }, - { - "name": "Amplifier Core 2", - "from": [ 5.000000014901161, 3.0, 3.0 ], - "to": [ 6.000000014901161, 4.0, 4.0 ], - "rotation": { "origin": [ 5.0, 4.0, 8.0 ], "axis": "z", "angle": 45.0 }, - "faces": { - "north": { "texture": "#2", "uv": [ 9.0, 8.0, 10.0, 9.0 ] }, - "east": { "texture": "#2", "uv": [ 10.0, 1.0, 11.0, 2.0 ] }, - "south": { "texture": "#2", "uv": [ 9.0, 8.0, 10.0, 9.0 ] }, - "west": { "texture": "#2", "uv": [ 3.0, 5.0, 4.0, 6.0 ] }, - "up": { "texture": "#2", "uv": [ 11.0, 1.0, 10.0, 2.0 ] }, - "down": { "texture": "#2", "uv": [ 13.0, 10.0, 14.0, 11.0 ] } - } - }, - { - "name": "Amplifier Glow 2", - "from": [ 4.800000000000001, 2.7999999970197678, 2.7999999970197678 ], - "to": [ 6.200000005960465, 4.200000002980232, 4.200000002980232 ], - "rotation": { "origin": [ 5.0, 4.0, 8.0 ], "axis": "z", "angle": 45.0 }, - "faces": { - "north": { "texture": "#3", "uv": [ 7.0, 7.0, 9.0, 9.0 ] }, - "east": { "texture": "#3", "uv": [ 7.0, 7.0, 9.0, 9.0 ] }, - "south": { "texture": "#3", "uv": [ 7.0, 7.0, 9.0, 9.0 ] }, - "west": { "texture": "#3", "uv": [ 6.0, 7.0, 8.0, 9.0 ] }, - "up": { "texture": "#3", "uv": [ 7.0, 6.0, 9.0, 8.0 ] }, - "down": { "texture": "#3", "uv": [ 7.0, 7.0, 9.0, 9.0 ] } - } - }, - { - "name": "Retriever Front", - "from": [ 6.0, 2.0, 7.0 ], - "to": [ 10.0, 3.0, 8.0 ], - "rotation": { "origin": [ 8.0, 3.0, 7.0 ], "axis": "x", "angle": -22.5 }, - "faces": { - "north": { "texture": "#6", "uv": [ 2.0, 14.0, 6.0, 15.0 ] }, - "east": { "texture": "#5", "uv": [ 15.0, 8.0, 16.0, 9.0 ] }, - "south": { "texture": "#5", "uv": [ 1.0, 13.0, 5.0, 14.0 ] }, - "west": { "texture": "#5", "uv": [ 15.0, 7.0, 16.0, 8.0 ] }, - "up": { "texture": "#5", "uv": [ 3.0, 15.0, 7.0, 16.0 ] }, - "down": { "texture": "#5", "uv": [ 7.0, 15.0, 11.0, 16.0 ] } - } - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/item/placement_handgun/chorus_retriever.json b/src/main/resources/assets/create/models/item/placement_handgun/chorus_retriever.json index dd1521d1f..828943343 100644 --- a/src/main/resources/assets/create/models/item/placement_handgun/chorus_retriever.json +++ b/src/main/resources/assets/create/models/item/placement_handgun/chorus_retriever.json @@ -1,42 +1,22 @@ { "__comment": "Model generated using MrCrayfish's Model Creator (http://mrcrayfish.com/modelcreator/)", - "parent": "create:item/placement_handgun", + "parent": "create:item/placement_handgun", "textures": { - "0": "block/anvil", - "1": "block/gray_concrete_powder", - "2": "block/white_concrete_powder", - "3": "block/white_stained_glass", - "4": "block/obsidian", - "5": "block/purpur_pillar", - "6": "block/green_concrete_powder" + "0": "create:block/chorus_chrome_mesh", + "cyan_concrete_powder": "block/cyan_concrete_powder" }, "elements": [ { - "name": "Retriever Back", - "from": [ 7.0, 2.0, 8.0 ], - "to": [ 9.0, 4.0, 9.0 ], - "rotation": { "origin": [ 8.0, 3.0, 7.0 ], "axis": "x", "angle": -22.5 }, + "name": "Retriever", + "from": [ 6.5, 3, 6.1 ], + "to": [ 9.5, 4, 8.1 ], "faces": { - "north": { "texture": "#5", "uv": [ 12.0, 4.0, 14.0, 6.0 ] }, - "east": { "texture": "#5", "uv": [ 15.0, 8.0, 16.0, 10.0 ] }, - "south": { "texture": "#5", "uv": [ 1.0, 13.0, 3.0, 15.0 ] }, - "west": { "texture": "#5", "uv": [ 15.0, 7.0, 16.0, 9.0 ] }, - "up": { "texture": "#5", "uv": [ 3.0, 15.0, 5.0, 16.0 ] }, - "down": { "texture": "#5", "uv": [ 7.0, 15.0, 9.0, 16.0 ] } - } - }, - { - "name": "Retriever Front", - "from": [ 6.0, 2.0, 7.0 ], - "to": [ 10.0, 3.0, 8.0 ], - "rotation": { "origin": [ 8.0, 3.0, 7.0 ], "axis": "x", "angle": -22.5 }, - "faces": { - "north": { "texture": "#6", "uv": [ 2.0, 14.0, 6.0, 15.0 ] }, - "east": { "texture": "#5", "uv": [ 15.0, 8.0, 16.0, 9.0 ] }, - "south": { "texture": "#5", "uv": [ 1.0, 13.0, 5.0, 14.0 ] }, - "west": { "texture": "#5", "uv": [ 15.0, 7.0, 16.0, 8.0 ] }, - "up": { "texture": "#5", "uv": [ 3.0, 15.0, 7.0, 16.0 ] }, - "down": { "texture": "#5", "uv": [ 7.0, 15.0, 11.0, 16.0 ] } + "north": { "texture": "#cyan_concrete_powder", "uv": [ 5, 11, 8, 12 ] }, + "east": { "texture": "#cyan_concrete_powder", "uv": [ 10, 7, 12, 8 ] }, + "south": { "texture": "#cyan_concrete_powder", "uv": [ 9, 7, 12, 8 ] }, + "west": { "texture": "#cyan_concrete_powder", "uv": [ 10, 7, 12, 8 ] }, + "up": { "texture": "#0", "uv": [ 0, 6, 3, 8 ] }, + "down": { "texture": "#0", "uv": [ 0, 6, 3, 8 ] } } } ] diff --git a/src/main/resources/assets/create/models/item/placement_handgun/chorus_scope.json b/src/main/resources/assets/create/models/item/placement_handgun/chorus_scope.json index 0e8ca3f12..a6ee3dd41 100644 --- a/src/main/resources/assets/create/models/item/placement_handgun/chorus_scope.json +++ b/src/main/resources/assets/create/models/item/placement_handgun/chorus_scope.json @@ -1,55 +1,37 @@ { "__comment": "Model generated using MrCrayfish's Model Creator (http://mrcrayfish.com/modelcreator/)", + "ambientocclusion": true, "parent": "create:item/placement_handgun", "textures": { - "0": "block/anvil", - "1": "block/gray_concrete_powder", - "2": "block/white_concrete_powder", - "3": "block/white_stained_glass", - "4": "block/obsidian", - "5": "block/purpur_pillar", - "6": "block/obsidian" + "mesh": "create:block/chorus_chrome_mesh", + "smooth_stone_slab_side": "block/smooth_stone_slab_side" }, "elements": [ { "name": "Scope", - "from": [ 7.500000007450581, 6.0, 6.0 ], - "to": [ 8.50000000745058, 7.0, 12.0 ], + "from": [ 7.5, 7.5, 9.5 ], + "to": [ 8.5, 8.5, 14.5 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "z", "angle": 45.0 }, "faces": { - "north": { "texture": "#5", "uv": [ 15.0, 7.0, 16.0, 8.0 ] }, - "east": { "texture": "#5", "uv": [ 8.0, 15.0, 14.0, 16.0 ] }, - "south": { "texture": "#5", "uv": [ 15.0, 8.0, 16.0, 9.0 ] }, - "west": { "texture": "#5", "uv": [ 6.0, 15.0, 12.0, 16.0 ] }, - "up": { "texture": "#5", "uv": [ 15.0, 5.0, 16.0, 11.0 ] }, - "down": { "texture": "#5", "uv": [ 15.0, 4.0, 16.0, 10.0 ] } + "north": { "texture": "#smooth_stone_slab_side", "uv": [ 0, 0, 1, 1 ] }, + "east": { "texture": "#mesh", "uv": [ 8, 1, 9, 6 ], "rotation": 90 }, + "south": { "texture": "#smooth_stone_slab_side", "uv": [ 0, 0, 1, 1 ] }, + "west": { "texture": "#mesh", "uv": [ 7, 1, 8, 6 ], "rotation": 270 }, + "up": { "texture": "#mesh", "uv": [ 7, 1, 8, 6 ] }, + "down": { "texture": "#mesh", "uv": [ 7, 1, 8, 6 ] } } }, { - "name": "Scope Back", - "from": [ 7.200000002980232, 7.0, 10.0 ], - "to": [ 8.800000011920929, 9.0, 12.0 ], - "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "x", "angle": 45.0 }, + "name": "Scope Connector", + "from": [ 7.5, 7, 11 ], + "to": [ 8.5, 8, 12 ], "faces": { - "north": { "texture": "#5", "uv": [ 13.0, 1.0, 15.0, 3.0 ] }, - "east": { "texture": "#5", "uv": [ 4.0, 2.0, 6.0, 4.0 ] }, - "south": { "texture": "#5", "uv": [ 1.0, 6.0, 2.6000000089406967, 8.0 ] }, - "west": { "texture": "#5", "uv": [ 4.0, 2.0, 6.0, 4.0 ] }, - "up": { "texture": "#5", "uv": [ 5.0, 6.0, 6.600000008940697, 8.0 ] }, - "down": { "texture": "#5", "uv": [ 4.0, 4.0, 5.600000008940697, 6.0 ] } - } - }, - { - "name": "ScopeTop", - "from": [ 7.0, 7.0, 9.0 ], - "to": [ 9.0, 9.0, 13.0 ], - "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "z", "angle": 45.0 }, - "faces": { - "north": { "texture": "#6", "uv": [ 0.0, 0.0, 2.0, 2.0 ] }, - "east": { "texture": "#5", "uv": [ 6.0, 3.0, 10.0, 5.0 ] }, - "south": { "texture": "#6", "uv": [ 0.0, 0.0, 2.0, 2.0 ] }, - "west": { "texture": "#5", "uv": [ 10.0, 2.0, 14.0, 4.0 ] }, - "up": { "texture": "#5", "uv": [ 15.0, 11.0, 13.0, 15.0 ] }, - "down": { "texture": "#5", "uv": [ 10.0, 3.0, 12.0, 7.0 ] } + "north": { "texture": "#mesh", "uv": [ 0, 0, 1, 1 ] }, + "east": { "texture": "#mesh", "uv": [ 0, 0, 1, 1 ] }, + "south": { "texture": "#mesh", "uv": [ 0, 0, 1, 1 ] }, + "west": { "texture": "#mesh", "uv": [ 0, 0, 1, 1 ] }, + "up": { "texture": "#mesh", "uv": [ 0, 0, 1, 1 ] }, + "down": { "texture": "#mesh", "uv": [ 0, 0, 1, 1 ] } } } ] diff --git a/src/main/resources/assets/create/models/item/placement_handgun/core.json b/src/main/resources/assets/create/models/item/placement_handgun/core.json index 6c1bf80ac..0894aea72 100644 --- a/src/main/resources/assets/create/models/item/placement_handgun/core.json +++ b/src/main/resources/assets/create/models/item/placement_handgun/core.json @@ -2,36 +2,31 @@ "__comment": "Model generated using MrCrayfish's Model Creator (http://mrcrayfish.com/modelcreator/)", "parent": "create:item/placement_handgun", "textures": { - "0": "block/white_concrete_powder", - "1": "block/white_stained_glass" + "2": "block/white_concrete_powder", + "3": "block/white_stained_glass" }, "elements": [ { - "name": "Rod Front", - "from": [ 7.300000004470348, 4.3000000193715096, 0.5000000074505806 ], - "to": [ 8.699999995529652, 5.700000010430813, 8.50000000745058 ], - "rotation": { "origin": [ 8.0, 5.0, 8.0 ], "axis": "z", "angle": -45.0 }, + "name": "Core", + "from": [ 7.3, 5, 2.7 ], + "to": [ 8.7, 6, 11.7 ], "faces": { - "north": { "texture": "#0", "uv": [ 0.0, 0.0, 1.3999999910593033, 1.3999999910593033 ] }, - "east": { "texture": "#0", "uv": [ 4.0, 4.0, 12.0, 5.399999991059303 ] }, - "south": { "texture": "#0", "uv": [ 0.0, 0.0, 1.3999999910593033, 1.3999999910593033 ] }, - "west": { "texture": "#0", "uv": [ 1.0, 0.0, 9.0, 1.3999999910593033 ] }, - "up": { "texture": "#0", "uv": [ 0.0, 0.0, 1.3999999910593033, 8.0 ] }, - "down": { "texture": "#0", "uv": [ 0.0, 0.0, 1.3999999910593033, 8.0 ] } + "north": { "texture": "#2", "uv": [ 6, 5, 7, 6 ] }, + "east": { "texture": "#2", "uv": [ 3, 5, 12, 6 ] }, + "west": { "texture": "#2", "uv": [ 3, 7, 12, 8 ] } } }, { - "name": "Rod Glow", - "from": [ 6.899999998509884, 3.900000013411045, 0.0 ], - "to": [ 9.100000001490116, 6.100000016391277, 7.0 ], - "rotation": { "origin": [ 8.0, 5.0, 8.0 ], "axis": "z", "angle": -45.0 }, + "name": "Core Glow", + "from": [ 7.1, 4.6, 2.5 ], + "to": [ 8.9, 6.4, 11.4 ], "faces": { - "north": { "texture": "#1", "uv": [ 0.0, 0.0, 2.2000000029802322, 2.2000000029802322 ] }, - "east": { "texture": "#1", "uv": [ 0.0, 0.0, 7.0, 2.2000000029802322 ] }, - "south": { "texture": "#1", "uv": [ 0.0, 0.0, 2.2000000029802322, 2.2000000029802322 ] }, - "west": { "texture": "#1", "uv": [ 0.0, 0.0, 7.0, 2.2000000029802322 ] }, - "up": { "texture": "#1", "uv": [ 0.0, 0.0, 2.2000000029802322, 7.0 ] }, - "down": { "texture": "#1", "uv": [ 0.0, 0.0, 2.2000000029802322, 7.0 ] } + "north": { "texture": "#3", "uv": [ 6, 7, 7.8, 8.8 ] }, + "east": { "texture": "#3", "uv": [ 3, 7, 11.9, 8.8 ] }, + "south": { "texture": "#3", "uv": [ 5, 7, 6.8, 8.8 ] }, + "west": { "texture": "#3", "uv": [ 4, 7, 12.9, 8.8 ] }, + "up": { "texture": "#3", "uv": [ 7, 3, 8.8, 11.9 ] }, + "down": { "texture": "#3", "uv": [ 7, 4, 8.8, 12.9 ] } } } ] diff --git a/src/main/resources/assets/create/models/item/placement_handgun/gold_accelerator.json b/src/main/resources/assets/create/models/item/placement_handgun/gold_accelerator.json index f02eb108c..e2149ed31 100644 --- a/src/main/resources/assets/create/models/item/placement_handgun/gold_accelerator.json +++ b/src/main/resources/assets/create/models/item/placement_handgun/gold_accelerator.json @@ -2,51 +2,61 @@ "__comment": "Model generated using MrCrayfish's Model Creator (http://mrcrayfish.com/modelcreator/)", "parent": "create:item/placement_handgun", "textures": { - "0": "block/anvil", - "1": "block/gray_concrete_powder", - "2": "block/white_concrete_powder", - "3": "block/white_stained_glass", - "4": "block/obsidian", - "5": "block/gold_block" + "cog": "minecraft:block/yellow_concrete_powder" }, "elements": [ { - "name": "Accelerator", - "from": [ 6.499999992549419, 5.0, 10.300000004470348 ], - "to": [ 9.49999999254942, 6.0, 15.300000004470348 ], + "name": "Cog", + "from": [ 7.5, 3, 12 ], + "to": [ 8.5, 8, 14 ], "faces": { - "north": { "texture": "#5", "uv": [ 7.0, 1.0, 10.0, 2.0 ] }, - "south": { "texture": "#5", "uv": [ 6.0, 3.0, 9.0, 4.0 ] }, - "up": { "texture": "#5", "uv": [ 6.0, 10.0, 9.0, 15.0 ] }, - "down": { "texture": "#5", "uv": [ 7.0, 0.0, 10.0, 5.0 ] } + "north": { "texture": "#cog", "uv": [ 6, 7, 8, 12 ] }, + "east": { "texture": "#cog", "uv": [ 5, 3, 7, 8 ] }, + "south": { "texture": "#cog", "uv": [ 4, 4, 5, 9 ] }, + "west": { "texture": "#cog", "uv": [ 4, 6, 6, 11 ] }, + "up": { "texture": "#cog", "uv": [ 4, 6, 5, 8 ] }, + "down": { "texture": "#cog", "uv": [ 5, 6, 6, 8 ] } } }, { - "name": "Accelerator Connector", - "from": [ 6.4000000059604645, 7.300000004470348, 10.300000004470348 ], - "to": [ 9.600000008940697, 8.699999995529652, 11.699999995529652 ], - "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "x", "angle": 45.0 }, + "name": "Cog", + "from": [ 7.5, 3, 12 ], + "to": [ 8.5, 8, 14 ], + "rotation": { "origin": [ 8, 5.5, 8 ], "axis": "z", "angle": 45.0 }, "faces": { - "north": { "texture": "#0", "uv": [ 13.0, 1.0, 15.0, 3.0 ] }, - "east": { "texture": "#0", "uv": [ 4.0, 2.0, 5.399999991059303, 3.3999999910593033 ] }, - "south": { "texture": "#0", "uv": [ 1.0, 6.0, 4.200000002980232, 7.399999991059303 ] }, - "west": { "texture": "#0", "uv": [ 4.0, 2.0, 5.399999991059303, 3.3999999910593033 ] }, - "up": { "texture": "#0", "uv": [ 5.0, 6.0, 8.200000002980232, 7.399999991059303 ] }, - "down": { "texture": "#0", "uv": [ 4.0, 4.0, 7.200000002980232, 5.399999991059303 ] } + "north": { "texture": "#cog", "uv": [ 6, 7, 8, 12 ] }, + "east": { "texture": "#cog", "uv": [ 5, 3, 7, 8 ] }, + "south": { "texture": "#cog", "uv": [ 4, 4, 5, 9 ] }, + "west": { "texture": "#cog", "uv": [ 4, 6, 6, 11 ] }, + "up": { "texture": "#cog", "uv": [ 4, 6, 5, 8 ] }, + "down": { "texture": "#cog", "uv": [ 5, 6, 6, 8 ] } } }, { - "name": "Accelerator Back Cap", - "from": [ 7.100000001490116, 4.3000000193715096, 15.0 ], - "to": [ 8.699999995529652, 5.900000013411045, 15.399999991059303 ], - "rotation": { "origin": [ 8.0, 5.0, 8.0 ], "axis": "z", "angle": -45.0 }, + "name": "Cog", + "from": [ 7.5, 3, 12 ], + "to": [ 8.5, 8, 14 ], + "rotation": { "origin": [ 8, 5.5, 8 ], "axis": "z", "angle": -45.0 }, "faces": { - "north": { "texture": "#5", "uv": [ 7.0, 7.0, 9.0, 9.0 ] }, - "east": { "texture": "#5", "uv": [ 12.0, 4.0, 13.0, 6.4000000059604645 ] }, - "south": { "texture": "#5", "uv": [ 11.0, 5.0, 13.0, 7.0 ] }, - "west": { "texture": "#5", "uv": [ 6.0, 2.0, 7.0, 4.4000000059604645 ] }, - "up": { "texture": "#5", "uv": [ 7.0, 6.0, 9.400000005960464, 7.0 ] }, - "down": { "texture": "#5", "uv": [ 9.0, 0.0, 11.400000005960464, 1.0 ] } + "north": { "texture": "#cog", "uv": [ 6, 7, 8, 12 ] }, + "east": { "texture": "#cog", "uv": [ 5, 3, 7, 8 ] }, + "south": { "texture": "#cog", "uv": [ 4, 4, 5, 9 ] }, + "west": { "texture": "#cog", "uv": [ 4, 6, 6, 11 ] }, + "up": { "texture": "#cog", "uv": [ 4, 6, 5, 8 ] }, + "down": { "texture": "#cog", "uv": [ 5, 6, 6, 8 ] } + } + }, + { + "name": "Cog", + "from": [ 5.5, 5, 12 ], + "to": [ 10.5, 6, 14 ], + "faces": { + "north": { "texture": "#cog", "uv": [ 6, 7, 8, 12 ] }, + "east": { "texture": "#cog", "uv": [ 5, 3, 7, 4 ] }, + "south": { "texture": "#cog", "uv": [ 4, 4, 9, 5 ] }, + "west": { "texture": "#cog", "uv": [ 4, 6, 6, 7 ] }, + "up": { "texture": "#cog", "uv": [ 4, 6, 5, 8 ] }, + "down": { "texture": "#cog", "uv": [ 5, 6, 6, 8 ] } } } ] diff --git a/src/main/resources/assets/create/models/item/placement_handgun/gold_accelerator_core.json b/src/main/resources/assets/create/models/item/placement_handgun/gold_accelerator_core.json deleted file mode 100644 index 272cfe757..000000000 --- a/src/main/resources/assets/create/models/item/placement_handgun/gold_accelerator_core.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "__comment": "Model generated using MrCrayfish's Model Creator (http://mrcrayfish.com/modelcreator/)", - "parent": "create:item/placement_handgun", - "textures": { - "0": "block/anvil", - "1": "block/gray_concrete_powder", - "2": "block/white_concrete_powder", - "3": "block/white_stained_glass", - "4": "block/obsidian", - "5": "block/gold_block" - }, - "elements": [ - { - "name": "Accelerator Core", - "from": [ 6.499999992549419, 5.0, 10.300000004470348 ], - "to": [ 9.49999999254942, 6.0, 15.300000004470348 ], - "faces": { - "east": { "texture": "#2", "uv": [ 4.0, 2.0, 9.0, 3.0 ] }, - "west": { "texture": "#2", "uv": [ 7.0, 2.0, 12.0, 3.0 ] } - } - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/item/placement_handgun/gold_amplifier.json b/src/main/resources/assets/create/models/item/placement_handgun/gold_amplifier.json index 872ad8fed..fd3285253 100644 --- a/src/main/resources/assets/create/models/item/placement_handgun/gold_amplifier.json +++ b/src/main/resources/assets/create/models/item/placement_handgun/gold_amplifier.json @@ -2,40 +2,33 @@ "__comment": "Model generated using MrCrayfish's Model Creator (http://mrcrayfish.com/modelcreator/)", "parent": "create:item/placement_handgun", "textures": { - "0": "block/anvil", - "1": "block/gray_concrete_powder", - "2": "block/white_concrete_powder", - "3": "block/white_stained_glass", - "4": "block/obsidian", - "5": "block/gold_block" + "0": "create:block/blaze_brass_mesh" }, "elements": [ { - "name": "Amplifier", - "from": [ 10.000000014901161, 4.0, 4.0 ], - "to": [ 11.000000014901161, 5.0, 10.0 ], - "rotation": { "origin": [ 11.0, 4.0, 8.0 ], "axis": "z", "angle": 45.0 }, + "name": "Amplifier Connector", + "from": [ 7, 2, 3 ], + "to": [ 9, 3, 8 ], "faces": { - "north": { "texture": "#5", "uv": [ 1.0, 2.0, 2.0, 3.0 ] }, - "east": { "texture": "#5", "uv": [ 10.0, 0.0, 16.0, 1.0 ] }, - "south": { "texture": "#5", "uv": [ 7.0, 7.0, 8.0, 8.0 ] }, - "west": { "texture": "#5", "uv": [ 0.0, 1.0, 6.0, 2.0 ] }, - "up": { "texture": "#5", "uv": [ 2.0, 0.0, 1.0, 6.0 ] }, - "down": { "texture": "#5", "uv": [ 13.0, 10.0, 14.0, 16.0 ] } + "north": { "texture": "#0", "uv": [ 1, 3, 3, 4 ] }, + "east": { "texture": "#0", "uv": [ 11, 5, 16, 6 ] }, + "south": { "texture": "#0", "uv": [ 0, 3, 2, 4 ] }, + "west": { "texture": "#0", "uv": [ 0, 5, 5, 6 ] }, + "up": { "texture": "#0", "uv": [ 0, 3, 5, 5 ], "rotation": 90 }, + "down": { "texture": "#0", "uv": [ 0, 3, 5, 5 ], "rotation": 270 } } }, { "name": "Amplifier Connector", - "from": [ 9.800000011920929, 5.0, 8.0 ], - "to": [ 10.800000011920929, 8.0, 9.0 ], - "rotation": { "origin": [ 11.0, 4.0, 8.0 ], "axis": "z", "angle": 45.0 }, + "from": [ 7, 3, 7 ], + "to": [ 9, 4, 8 ], "faces": { - "north": { "texture": "#0", "uv": [ 0.0, 0.0, 1.0, 3.0 ] }, - "east": { "texture": "#0", "uv": [ 6.0, 3.0, 7.0, 6.0 ] }, - "south": { "texture": "#0", "uv": [ 0.0, 0.0, 1.0, 3.0 ] }, - "west": { "texture": "#0", "uv": [ 10.0, 2.0, 14.0, 3.0 ] }, - "up": { "texture": "#0", "uv": [ 15.0, 11.0, 14.0, 15.0 ] }, - "down": { "texture": "#0", "uv": [ 10.0, 3.0, 11.0, 4.0 ] } + "north": { "texture": "#0", "uv": [ 0, 0, 2, 1 ] }, + "east": { "texture": "#0", "uv": [ 0, 0, 1, 1 ] }, + "south": { "texture": "#0", "uv": [ 0, 0, 2, 1 ] }, + "west": { "texture": "#0", "uv": [ 0, 0, 1, 1 ] }, + "up": { "texture": "#0", "uv": [ 0, 0, 2, 1 ] }, + "down": { "texture": "#0", "uv": [ 0, 0, 2, 1 ] } } } ] diff --git a/src/main/resources/assets/create/models/item/placement_handgun/gold_amplifier_core.json b/src/main/resources/assets/create/models/item/placement_handgun/gold_amplifier_core.json deleted file mode 100644 index 247e24a87..000000000 --- a/src/main/resources/assets/create/models/item/placement_handgun/gold_amplifier_core.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "__comment": "Model generated using MrCrayfish's Model Creator (http://mrcrayfish.com/modelcreator/)", - "parent": "create:item/placement_handgun", - "textures": { - "0": "block/anvil", - "1": "block/gray_concrete_powder", - "2": "block/white_concrete_powder", - "3": "block/white_stained_glass", - "4": "block/obsidian", - "5": "block/gold_block" - }, - "elements": [ - { - "name": "Amplifier Core", - "from": [ 10.000000014901161, 4.0, 3.0 ], - "to": [ 11.000000014901161, 5.0, 4.0 ], - "rotation": { "origin": [ 11.0, 4.0, 8.0 ], "axis": "z", "angle": 45.0 }, - "faces": { - "north": { "texture": "#2", "uv": [ 9.0, 8.0, 10.0, 9.0 ] }, - "east": { "texture": "#2", "uv": [ 10.0, 1.0, 11.0, 2.0 ] }, - "south": { "texture": "#2", "uv": [ 9.0, 8.0, 10.0, 9.0 ] }, - "west": { "texture": "#2", "uv": [ 3.0, 5.0, 4.0, 6.0 ] }, - "up": { "texture": "#2", "uv": [ 11.0, 1.0, 10.0, 2.0 ] }, - "down": { "texture": "#2", "uv": [ 13.0, 10.0, 14.0, 11.0 ] } - } - }, - { - "name": "Amplifier Glow", - "from": [ 9.8, 3.7999999970197678, 2.7999999970197678 ], - "to": [ 11.200000005960465, 5.200000002980232, 4.200000002980232 ], - "rotation": { "origin": [ 11.0, 4.0, 8.0 ], "axis": "z", "angle": 45.0 }, - "faces": { - "north": { "texture": "#3", "uv": [ 7.0, 7.0, 9.0, 9.0 ] }, - "east": { "texture": "#3", "uv": [ 7.0, 7.0, 9.0, 9.0 ] }, - "south": { "texture": "#3", "uv": [ 7.0, 7.0, 9.0, 9.0 ] }, - "west": { "texture": "#3", "uv": [ 6.0, 7.0, 8.0, 9.0 ] }, - "up": { "texture": "#3", "uv": [ 7.0, 6.0, 9.0, 8.0 ] }, - "down": { "texture": "#3", "uv": [ 7.0, 7.0, 9.0, 9.0 ] } - } - } - ] -} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/item/placement_handgun/gold_body.json b/src/main/resources/assets/create/models/item/placement_handgun/gold_body.json index b6e6b0559..b72e2b6e3 100644 --- a/src/main/resources/assets/create/models/item/placement_handgun/gold_body.json +++ b/src/main/resources/assets/create/models/item/placement_handgun/gold_body.json @@ -3,25 +3,61 @@ "ambientocclusion": true, "parent": "create:item/placement_handgun", "textures": { - "0": "block/anvil", - "1": "block/magma", - "2": "block/white_concrete_powder", - "3": "block/white_stained_glass", - "4": "block/obsidian" + "0": "create:block/blaze_brass_mesh" }, "elements": [ { - "name": "Rod Back", - "from": [ 7.0, 4.000000014901161, 7.0 ], - "to": [ 9.0, 6.000000014901161, 14.0 ], - "rotation": { "origin": [ 8.0, 5.0, 8.0 ], "axis": "z", "angle": -45.0 }, + "name": "Connector", + "from": [ 7, 4, 2 ], + "to": [ 9, 5, 12 ], "faces": { - "north": { "texture": "#1", "uv": [ 0.0, 0.0, 2.0, 2.0 ] }, - "east": { "texture": "#1", "uv": [ 0.0, 0.0, 7.0, 2.0 ] }, - "south": { "texture": "#1", "uv": [ 6.0, 7.0, 8.0, 9.0 ] }, - "west": { "texture": "#1", "uv": [ 4.0, 3.0, 11.0, 5.0 ] }, - "up": { "texture": "#1", "uv": [ 6.0, 5.0, 8.0, 12.0 ] }, - "down": { "texture": "#1", "uv": [ 8.0, 6.0, 10.0, 13.0 ] } + "north": { "texture": "#0", "uv": [ 6, 3, 8, 4 ] }, + "east": { "texture": "#0", "uv": [ 6, 5, 16, 6 ] }, + "south": { "texture": "#0", "uv": [ 8, 5, 10, 6 ] }, + "west": { "texture": "#0", "uv": [ 0, 5, 10, 6 ] }, + "up": { "texture": "#0", "uv": [ 3, 3, 13, 5 ], "rotation": 270 }, + "down": { "texture": "#0", "uv": [ 0, 4, 10, 6 ], "rotation": 270 } + } + }, + { + "name": "Rod Back Cap", + "from": [ 7, 4.5, 14 ], + "to": [ 9, 6.5, 15 ], + "rotation": { "origin": [ 8, 5.5, 8 ], "axis": "z", "angle": -45.0 }, + "faces": { + "north": { "texture": "#0", "uv": [ 0, 0, 2, 2 ] }, + "east": { "texture": "#0", "uv": [ 0, 0, 1, 2 ] }, + "south": { "texture": "#0", "uv": [ 0, 0, 2, 2 ] }, + "west": { "texture": "#0", "uv": [ 0, 0, 1, 2 ] }, + "up": { "texture": "#0", "uv": [ 0, 0, 2, 1 ] }, + "down": { "texture": "#0", "uv": [ 0, 0, 2, 1 ] } + } + }, + { + "name": "Connector", + "from": [ 7, 6, 2 ], + "to": [ 9, 7, 12 ], + "faces": { + "north": { "texture": "#0", "uv": [ 0, 8, 2, 9 ] }, + "east": { "texture": "#0", "uv": [ 0, 6, 10, 7 ] }, + "south": { "texture": "#0", "uv": [ 0, 7, 2, 8 ] }, + "west": { "texture": "#0", "uv": [ 0, 6, 10, 7 ] }, + "up": { "texture": "#0", "uv": [ 0, 6, 2, 16 ] }, + "down": { "texture": "#0", "uv": [ 0, 6, 2, 16 ] } + } + }, + { + "name": "Rod Back Cap", + "from": [ 7, 4.5, 11 ], + "to": [ 9, 6.5, 12 ], + "rotation": { "origin": [ 8, 5.5, 8 ], "axis": "z", "angle": -45.0 }, + "faces": { + "north": { "texture": "#0", "uv": [ 0, 0, 2, 2 ] }, + "east": { "texture": "#0", "uv": [ 0, 0, 1, 2 ] }, + "south": { "texture": "#0", "uv": [ 0, 0, 2, 2 ] }, + "west": { "texture": "#0", "uv": [ 0, 0, 1, 2 ] }, + "up": { "texture": "#0", "uv": [ 0, 0, 2, 1 ] }, + "down": { "texture": "#0", "uv": [ 0, 0, 2, 1 ] } } } ] diff --git a/src/main/resources/assets/create/models/item/placement_handgun/gold_retriever.json b/src/main/resources/assets/create/models/item/placement_handgun/gold_retriever.json index eafe1f4ea..ed9089678 100644 --- a/src/main/resources/assets/create/models/item/placement_handgun/gold_retriever.json +++ b/src/main/resources/assets/create/models/item/placement_handgun/gold_retriever.json @@ -2,27 +2,21 @@ "__comment": "Model generated using MrCrayfish's Model Creator (http://mrcrayfish.com/modelcreator/)", "parent": "create:item/placement_handgun", "textures": { - "0": "block/anvil", - "1": "block/gray_concrete_powder", - "2": "block/white_concrete_powder", - "3": "block/white_stained_glass", - "4": "block/obsidian", - "5": "block/gold_block", - "6": "block/redstone_block" + "0": "create:block/blaze_brass_mesh", + "cyan_concrete_powder": "block/cyan_concrete_powder" }, "elements": [ { - "name": "Retriever Back", - "from": [ 7.0, 2.0, 8.0 ], - "to": [ 9.0, 4.0, 9.0 ], - "rotation": { "origin": [ 8.0, 3.0, 7.0 ], "axis": "x", "angle": -22.5 }, + "name": "Retriever", + "from": [ 6.5, 3, 6.1 ], + "to": [ 9.5, 4, 8.1 ], "faces": { - "north": { "texture": "#6", "uv": [ 12.0, 4.0, 14.0, 6.0 ] }, - "east": { "texture": "#5", "uv": [ 15.0, 8.0, 16.0, 10.0 ] }, - "south": { "texture": "#5", "uv": [ 1.0, 13.0, 3.0, 15.0 ] }, - "west": { "texture": "#5", "uv": [ 15.0, 7.0, 16.0, 9.0 ] }, - "up": { "texture": "#5", "uv": [ 3.0, 15.0, 5.0, 16.0 ] }, - "down": { "texture": "#5", "uv": [ 7.0, 15.0, 9.0, 16.0 ] } + "north": { "texture": "#cyan_concrete_powder", "uv": [ 5, 11, 8, 12 ] }, + "east": { "texture": "#cyan_concrete_powder", "uv": [ 10, 7, 12, 8 ] }, + "south": { "texture": "#cyan_concrete_powder", "uv": [ 9, 7, 12, 8 ] }, + "west": { "texture": "#cyan_concrete_powder", "uv": [ 10, 7, 12, 8 ] }, + "up": { "texture": "#0", "uv": [ 0, 6, 3, 8 ] }, + "down": { "texture": "#0", "uv": [ 0, 6, 3, 8 ] } } } ] diff --git a/src/main/resources/assets/create/models/item/placement_handgun/gold_scope.json b/src/main/resources/assets/create/models/item/placement_handgun/gold_scope.json index e6fc27ea0..685ecbd33 100644 --- a/src/main/resources/assets/create/models/item/placement_handgun/gold_scope.json +++ b/src/main/resources/assets/create/models/item/placement_handgun/gold_scope.json @@ -1,49 +1,37 @@ { "__comment": "Model generated using MrCrayfish's Model Creator (http://mrcrayfish.com/modelcreator/)", + "ambientocclusion": true, "parent": "create:item/placement_handgun", "textures": { - "3": "block/white_concrete", - "5": "block/gold_block" + "mesh": "create:block/blaze_brass_mesh", + "smooth_stone_slab_side": "block/smooth_stone_slab_side" }, "elements": [ { "name": "Scope", - "from": [ 7.500000007450581, 6.0, 6.0 ], - "to": [ 8.50000000745058, 7.0, 12.0 ], + "from": [ 7.5, 7.5, 9.5 ], + "to": [ 8.5, 8.5, 14.5 ], + "rotation": { "origin": [ 8, 8, 8 ], "axis": "z", "angle": 45.0 }, "faces": { - "north": { "texture": "#5", "uv": [ 15.0, 7.0, 16.0, 8.0 ] }, - "east": { "texture": "#5", "uv": [ 8.0, 15.0, 14.0, 16.0 ] }, - "south": { "texture": "#5", "uv": [ 15.0, 8.0, 16.0, 9.0 ] }, - "west": { "texture": "#5", "uv": [ 6.0, 15.0, 12.0, 16.0 ] }, - "up": { "texture": "#5", "uv": [ 15.0, 5.0, 16.0, 11.0 ] }, - "down": { "texture": "#5", "uv": [ 15.0, 4.0, 16.0, 10.0 ] } + "north": { "texture": "#smooth_stone_slab_side", "uv": [ 0, 0, 1, 1 ] }, + "east": { "texture": "#mesh", "uv": [ 8, 1, 9, 6 ], "rotation": 90 }, + "south": { "texture": "#smooth_stone_slab_side", "uv": [ 0, 0, 1, 1 ] }, + "west": { "texture": "#mesh", "uv": [ 7, 1, 8, 6 ], "rotation": 270 }, + "up": { "texture": "#mesh", "uv": [ 7, 1, 8, 6 ] }, + "down": { "texture": "#mesh", "uv": [ 7, 1, 8, 6 ] } } }, { - "name": "Scope Back", - "from": [ 7.200000002980232, 7.0, 10.0 ], - "to": [ 8.800000011920929, 9.0, 12.0 ], - "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "x", "angle": 45.0 }, + "name": "Scope Connector", + "from": [ 7.5, 7, 11 ], + "to": [ 8.5, 8, 12 ], "faces": { - "north": { "texture": "#5", "uv": [ 13.0, 1.0, 15.0, 3.0 ] }, - "east": { "texture": "#5", "uv": [ 4.0, 2.0, 6.0, 4.0 ] }, - "south": { "texture": "#5", "uv": [ 1.0, 6.0, 2.6000000089406967, 8.0 ] }, - "west": { "texture": "#5", "uv": [ 4.0, 2.0, 6.0, 4.0 ] }, - "up": { "texture": "#5", "uv": [ 5.0, 6.0, 6.600000008940697, 8.0 ] }, - "down": { "texture": "#5", "uv": [ 4.0, 4.0, 5.600000008940697, 6.0 ] } - } - }, - { - "name": "ScopeTop", - "from": [ 7.500000007450581, 7.0, 9.0 ], - "to": [ 8.50000000745058, 8.0, 13.0 ], - "faces": { - "north": { "texture": "#3", "uv": [ 0.0, 0.0, 1.0, 1.0 ] }, - "east": { "texture": "#5", "uv": [ 6.0, 3.0, 10.0, 4.0 ] }, - "south": { "texture": "#3", "uv": [ 0.0, 0.0, 1.0, 1.0 ] }, - "west": { "texture": "#5", "uv": [ 10.0, 2.0, 14.0, 3.0 ] }, - "up": { "texture": "#5", "uv": [ 15.0, 11.0, 14.0, 15.0 ] }, - "down": { "texture": "#5", "uv": [ 10.0, 3.0, 11.0, 7.0 ] } + "north": { "texture": "#mesh", "uv": [ 0, 0, 1, 1 ] }, + "east": { "texture": "#mesh", "uv": [ 0, 0, 1, 1 ] }, + "south": { "texture": "#mesh", "uv": [ 0, 0, 1, 1 ] }, + "west": { "texture": "#mesh", "uv": [ 0, 0, 1, 1 ] }, + "up": { "texture": "#mesh", "uv": [ 0, 0, 1, 1 ] }, + "down": { "texture": "#mesh", "uv": [ 0, 0, 1, 1 ] } } } ] diff --git a/src/main/resources/assets/create/textures/block/andesite_alloy_mesh.png b/src/main/resources/assets/create/textures/block/andesite_alloy_mesh.png new file mode 100644 index 0000000000000000000000000000000000000000..c57558cee69a5a627117354d017796a21ce33006 GIT binary patch literal 383 zcmV-_0f7FAP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0Tf9@K~y+TU6N_4 zgg^|083*^R@hIN^HiEmN;sM^*WL^yBM^UL_DoKx@wr!nr=Xo|wa~wxe6xVgtb$#DA z97WxI-@zcy^Ld_=BpJsM6b{C53|cqKvcB(wD2nK@L3o;`5aEa~7yL4p7{)1X+a`$h z(pfc-0LcKEAT5RRav9=(uq+E<(=^e8D6+S3b)Orwh!4Y1!r(vkzt9nXH>~T*es*tF zlryTTDnEf)AgRR5qJ)V^sY{^;^usVP3#7N(!(Z<6KVYCTU6X`ZmlpEeP?n`Uh+HDu z>pi$Apnq1)gODVOEpaKhUrD|h_CwMy3JzMAeY&pm6HqBs;vu3~PT_*j4eZAogSPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0trb(K~y+TT~f<# z)G!pa<0N(*Kk|Y>BcxV<5D28QMEwEQtoR&u{35CZf|hyDWHRXt&BS?e)1Xn+ERK%P z@x3|MHvaf(WGbVzE|11kB}TZaDuhrNh5P;9aU9oi%d!N;cI@(4_65&hoPh)$Y~`F+ zmBGmBP&ZV<*ES7h6v%42AkQ>Yp$_86cAOS;6g%%y6$V5wgHp$n-QfH z0(%}m+}#~!TXOj_cC;sxC#{8Bj6EfNC5h`gjB%~2u5*3Cq&Pwgg#M;`{OR)jF3o}@ zgnTm8hb&i7kZ*VQ{8oetP{l!>W}x&#$95M)dbixfqab|`&>%%iL6oN@k8|9$m? zT)a7N+7_;&?K;4wsdW?r7h1uYNv#I`Kf>suHC+0u$wCHd`DX@41bk2c)8!h1o!lUa z$?LPH&=MNU;PFp-UN?gRE}+ob;zBHLrd&!$3D0ZDI=`6!AMoV5jQ;w5MK0c+!z+MN zWFbgAw6BdhVP(w8txQGyw)BL*p3dREHnRob;(7`S+|e-419zE>NB;n5g)`xf#u`EZ O0000Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0t`t+K~y+TU6NgI z(=Zr?lQ?$b@1!lOh6X}nOk50&E6}dEfE)e@zk%O60h*v|)^`0^BSGS%4yR-r2wyxp zd5?Yk+Hv^$`FZP{v9@w`Q@bDx+olPEAkXu%EGY(KbzP%E1z97-JB{Y)&4T!^{}uQ5tuF9}EWYVx+}HNC6E-Q78njs%o<>!%y!% zbDma}!!*~ni0O7dP14%Ay$(E>Fy>qvL;(pRa(?puAh(o+gWQNT;fzX=#w1XZYt9wt z!wfDN4Kqff^5-vddh|w#WH2%z;)2c?A(dd1BneeU`mW_N5sG_{4WkuW`tbJSYP}id z`Fgv}jX{^0HS613=yh4hX9S;lx@?trSZbPxqR04qB~+NPFG8a{rx1*y!^6gi-n*vADRNga6jQ ze7z*6FV6hVTdOJJ&q{J_@##|NG`j74_;NoT}IDc?Q zc}9+(yhJ2|?S0t8CcVC+QJ^+5!citu1PgSD_t5t`xhkOVc<-i+U0i%4uTIXKYp^s7 zLUi26H|_2(o3?kgQLb$W#Ul`+xLyo0Tg*W7V_M*9(Kl`r-0R+*FAfhzzX4uAAIEW; R1QY-O002ovPDHLkV1gH~9~}Sy literal 0 HcmV?d00001 From 00be0f57f0cdf5ee0cec6650ebd138ea5401399b Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Tue, 22 Oct 2019 00:26:21 +0200 Subject: [PATCH 6/8] Last Minute Fixes - 0.1.1a - Added safety check for other Tile Entities blocking two Crushing Wheels, addresses #36 - Overwrote blockzapper preview renders of Fourway-blocks, addresses #21 - Added safety check for Crushing Wheels in null Worlds, addresses #38 --- build.gradle | 2 +- .../contraptions/receivers/CrushingWheelBlock.java | 2 ++ .../receivers/CrushingWheelControllerBlock.java | 10 ++++++---- .../placementHandgun/BuilderGunItemRenderer.java | 14 ++++++++++---- 4 files changed, 19 insertions(+), 9 deletions(-) diff --git a/build.gradle b/build.gradle index 1ac49b931..b25c1e610 100644 --- a/build.gradle +++ b/build.gradle @@ -74,7 +74,7 @@ dependencies { minecraft 'net.minecraftforge:forge:1.14.4-28.1.61' // compile against the JEI API but do not include it at runtime - compileOnly fg.deobf("mezz.jei:jei-1.14.4:6.0.0.18:api") + compileOnly fg.deobf("mezz.jei:jei-1.14.4:6.0.0.10:api") // at runtime, use the full JEI jar runtimeOnly fg.deobf("mezz.jei:jei-1.14.4:6.0.0.10") } diff --git a/src/main/java/com/simibubi/create/modules/contraptions/receivers/CrushingWheelBlock.java b/src/main/java/com/simibubi/create/modules/contraptions/receivers/CrushingWheelBlock.java index 9f5fbccb5..fdf78b7a6 100644 --- a/src/main/java/com/simibubi/create/modules/contraptions/receivers/CrushingWheelBlock.java +++ b/src/main/java/com/simibubi/create/modules/contraptions/receivers/CrushingWheelBlock.java @@ -76,6 +76,8 @@ public class CrushingWheelBlock extends RotatedPillarKineticBlock { public void updateControllers(BlockState state, World world, BlockPos pos, Direction facing) { if (facing.getAxis() == state.get(AXIS) || facing.getAxis().isVertical()) return; + if (world == null) + return; BlockPos controllerPos = pos.offset(facing); BlockPos otherWheelPos = pos.offset(facing, 2); diff --git a/src/main/java/com/simibubi/create/modules/contraptions/receivers/CrushingWheelControllerBlock.java b/src/main/java/com/simibubi/create/modules/contraptions/receivers/CrushingWheelControllerBlock.java index 33e6866f3..2e5cd80b7 100644 --- a/src/main/java/com/simibubi/create/modules/contraptions/receivers/CrushingWheelControllerBlock.java +++ b/src/main/java/com/simibubi/create/modules/contraptions/receivers/CrushingWheelControllerBlock.java @@ -65,10 +65,12 @@ public class CrushingWheelControllerBlock extends Block implements IWithoutBlock super.onLanded(worldIn, entityIn); if (CrushingWheelControllerTileEntity.isFrozen()) return; - CrushingWheelControllerTileEntity te = (CrushingWheelControllerTileEntity) worldIn - .getTileEntity(entityIn.getPosition().down()); - if (te == null) + TileEntity tileEntity = worldIn.getTileEntity(entityIn.getPosition().down()); + if (tileEntity == null) return; + if (!(tileEntity instanceof CrushingWheelControllerTileEntity)) + return; + CrushingWheelControllerTileEntity te = (CrushingWheelControllerTileEntity) tileEntity; if (te.isOccupied()) return; @@ -96,7 +98,7 @@ public class CrushingWheelControllerBlock extends Block implements IWithoutBlock public void updateSpeed(BlockState state, World world, BlockPos pos) { CrushingWheelControllerTileEntity te = (CrushingWheelControllerTileEntity) world.getTileEntity(pos); - + if (te == null) return; if (!state.get(VALID) || CrushingWheelControllerTileEntity.isFrozen()) { diff --git a/src/main/java/com/simibubi/create/modules/curiosities/placementHandgun/BuilderGunItemRenderer.java b/src/main/java/com/simibubi/create/modules/curiosities/placementHandgun/BuilderGunItemRenderer.java index f7bfe386a..d24df1c94 100644 --- a/src/main/java/com/simibubi/create/modules/curiosities/placementHandgun/BuilderGunItemRenderer.java +++ b/src/main/java/com/simibubi/create/modules/curiosities/placementHandgun/BuilderGunItemRenderer.java @@ -12,6 +12,7 @@ import com.simibubi.create.modules.curiosities.placementHandgun.BuilderGunItem.C import com.simibubi.create.modules.curiosities.placementHandgun.BuilderGunItem.Components; import net.minecraft.block.BlockState; +import net.minecraft.block.FourWayBlock; import net.minecraft.client.Minecraft; import net.minecraft.client.entity.player.ClientPlayerEntity; import net.minecraft.client.renderer.ItemRenderer; @@ -47,7 +48,7 @@ public class BuilderGunItemRenderer extends ItemStackTileEntityRenderer { // Block indicator if (mainModel.showBlock && stack.hasTag() && stack.getTag().contains("BlockUsed")) renderBlockUsed(stack, itemRenderer); - + ClientPlayerEntity player = Minecraft.getInstance().player; boolean leftHanded = player.getPrimaryHand() == HandSide.LEFT; boolean mainHand = player.getHeldItemMainhand() == stack; @@ -73,7 +74,7 @@ public class BuilderGunItemRenderer extends ItemStackTileEntityRenderer { // Accelerator spins float angle = worldTime * -25; - if (mainHand || offHand) + if (mainHand || offHand) angle += 360 * animation; angle %= 360; @@ -92,8 +93,13 @@ public class BuilderGunItemRenderer extends ItemStackTileEntityRenderer { GlStateManager.pushMatrix(); GlStateManager.translatef(-0.8F, -0.7F, -0.5F); GlStateManager.scalef(0.25F, 0.25F, 0.25F); - itemRenderer.renderItem(new ItemStack(state.getBlock()), - Minecraft.getInstance().getBlockRendererDispatcher().getModelForState(state)); + IBakedModel modelForState = Minecraft.getInstance().getBlockRendererDispatcher().getModelForState(state); + + if (state.getBlock() instanceof FourWayBlock) + modelForState = Minecraft.getInstance().getItemRenderer() + .getModelWithOverrides(new ItemStack(state.getBlock())); + + itemRenderer.renderItem(new ItemStack(state.getBlock()), modelForState); GlStateManager.popMatrix(); } From 8eb10d68a8245b28a527aa386c120a4b837a4173 Mon Sep 17 00:00:00 2001 From: BuildTools Date: Sun, 27 Oct 2019 03:54:20 +0100 Subject: [PATCH 7/8] added gui handlers from the jei api to FlexcrateScreen and SchematicannonScreen, addresses #42 --- .../simibubi/create/compat/jei/CreateJEI.java | 13 ++++++++---- .../simibubi/create/compat/jei/SlotMover.java | 21 +++++++++++++++++++ .../gui/AbstractSimiContainerScreen.java | 10 +++++++++ .../logistics/block/FlexcrateScreen.java | 17 +++++++++++++++ .../block/SchematicannonScreen.java | 17 +++++++++++++++ 5 files changed, 74 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/simibubi/create/compat/jei/SlotMover.java diff --git a/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java b/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java index d4fbef785..f579a0530 100644 --- a/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java +++ b/src/main/java/com/simibubi/create/compat/jei/CreateJEI.java @@ -9,12 +9,11 @@ import com.simibubi.create.AllRecipes; import com.simibubi.create.Create; import com.simibubi.create.foundation.utility.Lang; +import com.simibubi.create.modules.logistics.block.FlexcrateScreen; +import com.simibubi.create.modules.schematics.block.SchematicannonScreen; import mezz.jei.api.IModPlugin; import mezz.jei.api.JeiPlugin; -import mezz.jei.api.registration.IRecipeCatalystRegistration; -import mezz.jei.api.registration.IRecipeCategoryRegistration; -import mezz.jei.api.registration.IRecipeRegistration; -import mezz.jei.api.registration.ISubtypeRegistration; +import mezz.jei.api.registration.*; import net.minecraft.client.Minecraft; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.IRecipe; @@ -90,6 +89,12 @@ public class CreateJEI implements IModPlugin { registration.addRecipeCatalyst(new ItemStack(AllItems.PLACEMENT_HANDGUN.get()), blockzapperCategory.getUid()); } + @Override + public void registerGuiHandlers(IGuiHandlerRegistration registration) { + registration.addGuiContainerHandler(FlexcrateScreen.class, new SlotMover<>()); + registration.addGuiContainerHandler(SchematicannonScreen.class, new SlotMover<>()); + } + private static List> findRecipes(AllRecipes recipe) { return findRecipesByType(recipe.type); } diff --git a/src/main/java/com/simibubi/create/compat/jei/SlotMover.java b/src/main/java/com/simibubi/create/compat/jei/SlotMover.java new file mode 100644 index 000000000..6d1df645e --- /dev/null +++ b/src/main/java/com/simibubi/create/compat/jei/SlotMover.java @@ -0,0 +1,21 @@ +package com.simibubi.create.compat.jei; + +import com.simibubi.create.foundation.gui.AbstractSimiContainerScreen; +import mezz.jei.api.gui.handlers.IGuiContainerHandler; +import net.minecraft.client.renderer.Rectangle2d; +import net.minecraft.inventory.container.Container; + +import java.util.List; + +/** + * Allows a {@link AbstractSimiContainerScreen} to specify an area in getExtraArea() that will be avoided by JEI + * + * Name is taken from CoFHCore's 1.12 implementation. + */ +public class SlotMover implements IGuiContainerHandler> { + + @Override + public List getGuiExtraAreas(AbstractSimiContainerScreen containerScreen) { + return containerScreen.getExtraAreas(); + } +} diff --git a/src/main/java/com/simibubi/create/foundation/gui/AbstractSimiContainerScreen.java b/src/main/java/com/simibubi/create/foundation/gui/AbstractSimiContainerScreen.java index b64478e6f..204154ee5 100644 --- a/src/main/java/com/simibubi/create/foundation/gui/AbstractSimiContainerScreen.java +++ b/src/main/java/com/simibubi/create/foundation/gui/AbstractSimiContainerScreen.java @@ -1,6 +1,7 @@ package com.simibubi.create.foundation.gui; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import com.mojang.blaze3d.platform.GlStateManager; @@ -8,6 +9,7 @@ import com.simibubi.create.foundation.gui.widgets.AbstractSimiWidget; import net.minecraft.client.gui.screen.inventory.ContainerScreen; import net.minecraft.client.gui.widget.Widget; +import net.minecraft.client.renderer.Rectangle2d; import net.minecraft.client.renderer.RenderHelper; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.inventory.container.Container; @@ -128,4 +130,12 @@ public abstract class AbstractSimiContainerScreen extends C } } + /** + * Used for moving JEI out of the way of extra things like Flexcrate renders + * + * @return the space that the gui takes up besides the normal rectangle defined by {@link ContainerScreen}. + */ + public List getExtraAreas() { + return Collections.emptyList(); + } } diff --git a/src/main/java/com/simibubi/create/modules/logistics/block/FlexcrateScreen.java b/src/main/java/com/simibubi/create/modules/logistics/block/FlexcrateScreen.java index d148a057b..0099a2e0c 100644 --- a/src/main/java/com/simibubi/create/modules/logistics/block/FlexcrateScreen.java +++ b/src/main/java/com/simibubi/create/modules/logistics/block/FlexcrateScreen.java @@ -15,9 +15,13 @@ import com.simibubi.create.foundation.utility.Lang; import com.simibubi.create.modules.logistics.packet.ConfigureFlexcratePacket; import net.minecraft.block.BlockState; +import net.minecraft.client.renderer.Rectangle2d; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.util.text.ITextComponent; +import java.util.ArrayList; +import java.util.List; + public class FlexcrateScreen extends AbstractSimiContainerScreen { private FlexcrateTileEntity te; @@ -25,6 +29,8 @@ public class FlexcrateScreen extends AbstractSimiContainerScreen extraAreas; + private final String title = Lang.translate("gui.flexcrate.title"); private final String storageSpace = Lang.translate("gui.flexcrate.storageSpace"); @@ -47,6 +53,9 @@ public class FlexcrateScreen extends AbstractSimiContainerScreen(); + extraAreas.add(new Rectangle2d(guiLeft + FLEXCRATE.width + 110, guiTop + 46, 71, 70)); } @Override @@ -76,6 +85,10 @@ public class FlexcrateScreen extends AbstractSimiContainerScreen getExtraAreas() { + return extraAreas; + } } diff --git a/src/main/java/com/simibubi/create/modules/schematics/block/SchematicannonScreen.java b/src/main/java/com/simibubi/create/modules/schematics/block/SchematicannonScreen.java index dea178076..0c4329997 100644 --- a/src/main/java/com/simibubi/create/modules/schematics/block/SchematicannonScreen.java +++ b/src/main/java/com/simibubi/create/modules/schematics/block/SchematicannonScreen.java @@ -1,7 +1,9 @@ package com.simibubi.create.modules.schematics.block; +import static com.simibubi.create.ScreenResources.FLEXCRATE; import static net.minecraft.util.text.TextFormatting.GRAY; +import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Vector; @@ -22,6 +24,7 @@ import com.simibubi.create.modules.schematics.packet.ConfigureSchematicannonPack import com.simibubi.create.modules.schematics.packet.ConfigureSchematicannonPacket.Option; import net.minecraft.client.gui.widget.Widget; +import net.minecraft.client.renderer.Rectangle2d; import net.minecraft.client.renderer.RenderHelper; import net.minecraft.entity.player.PlayerInventory; import net.minecraft.item.BlockItem; @@ -46,6 +49,8 @@ public class SchematicannonScreen extends AbstractSimiContainerScreen extraAreas; + private final String title = Lang.translate("gui.schematicannon.title"); private final String settingsTitle = Lang.translate("gui.schematicannon.settingsTitle"); private final String listPrinter = Lang.translate("gui.schematicannon.listPrinter"); @@ -112,6 +117,9 @@ public class SchematicannonScreen extends AbstractSimiContainerScreen(); + extraAreas.add(new Rectangle2d(guiLeft + 240, guiTop + 88, 84, 113)); + tick(); } @@ -219,6 +227,10 @@ public class SchematicannonScreen extends AbstractSimiContainerScreen getExtraAreas() { + return extraAreas; + } + protected void sendOptionUpdate(Option option, boolean set) { AllPackets.channel .sendToServer(ConfigureSchematicannonPacket.setOption(container.getTileEntity().getPos(), option, set)); From f2eba6b8fb06b59a1ede46bcc8675ed284aa9960 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Tue, 29 Oct 2019 19:02:20 +0100 Subject: [PATCH 8/8] Mixing it up - Added the Mechanical Mixer for automated shapeless recipes - Added the Basin holding multiple items for processing - Added a Wrench for manipulating Scrollvalues, picking up and rotating kinetic blocks - Extractors and Funnels now require a block to attach to - Fixed Animation ticks being synced with the server world time - Fixed "Magical Soaryn Gears" - Gearboxes can now connect to each other directly - Fixed Belt items not stacking even after finishing a link --- .../java/com/simibubi/create/AllBlocks.java | 26 +- .../java/com/simibubi/create/AllItems.java | 7 +- .../java/com/simibubi/create/AllPackets.java | 2 + .../com/simibubi/create/AllTileEntities.java | 8 + .../com/simibubi/create/ClientEvents.java | 2 +- .../com/simibubi/create/CreateClient.java | 8 +- .../create/compat/jei/AnimatedKinetics.java | 2 + .../create/compat/jei/AnimatedPress.java | 2 +- .../compat/jei/AnimationTickHolder.java | 11 - .../block/IBlockWithScrollableValue.java | 24 +- .../utility/AnimationTickHolder.java | 17 + .../contraptions/RotationPropagator.java | 18 +- .../modules/contraptions/WrenchItem.java | 48 ++ .../contraptions/WrenchItemRenderer.java | 37 ++ .../modules/contraptions/WrenchModel.java | 29 ++ .../modules/contraptions/base/IRotate.java | 11 +- .../base/KineticTileEntityRenderer.java | 4 +- .../base/RotatedPillarKineticBlock.java | 22 +- .../contraptions/receivers/BasinBlock.java | 114 +++++ .../receivers/BasinTileEntity.java | 129 ++++++ .../receivers/BasinTileEntityRenderer.java | 51 +++ .../receivers/ConfigureMixerPacket.java | 39 ++ .../receivers/MechanicalMixerBlock.java | 136 ++++++ .../receivers/MechanicalMixerTileEntity.java | 322 ++++++++++++++ .../MechanicalMixerTileEntityRenderer.java | 45 ++ .../MechanicalPressTileEntityRenderer.java | 28 +- .../receivers/TurntableBlock.java | 2 +- .../constructs/AbstractChassisBlock.java | 7 +- .../constructs/ConfigureChassisPacket.java | 1 + .../MechanicalBearingTileEntityRenderer.java | 4 +- .../contraptions/relays/CogWheelBlock.java | 24 +- .../relays/GearboxTileEntityRenderer.java | 7 +- .../contraptions/relays/ShaftBlock.java | 12 - .../relays/SplitShaftTileEntityRenderer.java | 5 +- .../contraptions/relays/belt/BeltItem.java | 3 +- .../relays/belt/BeltTileEntityRenderer.java | 5 +- .../ChromaticCompoundCubeItem.java | 4 +- .../BuilderGunItemRenderer.java | 4 +- .../client/SymmetryWandItemRenderer.java | 5 +- .../logistics/block/BeltFunnelBlock.java | 19 + .../logistics/block/ExtractorBlock.java | 35 +- .../block/SchematicannonScreen.java | 1 - .../assets/create/blockstates/basin.json | 5 + .../create/blockstates/mechanical_mixer.json | 5 + .../blockstates/mechanical_mixer_head.json | 5 + .../blockstates/mechanical_mixer_pole.json | 5 + .../blockstates/shaftless_cogwheel.json | 13 + .../resources/assets/create/lang/en_us.json | 9 +- .../assets/create/models/block/basin.json | 169 +++++++ .../models/block/cogwheel_shaftless.json | 91 ++++ .../create/models/block/mixer_base.json | 76 ++++ .../create/models/block/mixer_head.json | 129 ++++++ .../create/models/block/mixer_pole.json | 100 +++++ .../assets/create/models/item/basin.json | 3 + .../models/item/deforester/deforester.bbmodel | 1 + .../create/models/item/mechanical_mixer.json | 415 ++++++++++++++++++ .../assets/create/models/item/wrench.json | 129 ++++++ .../create/models/item/wrench/gear.json | 65 +++ .../create/models/item/wrench/wrench.bbmodel | 1 + .../assets/create/textures/block/basin.png | Bin 0 -> 816 bytes .../create/textures/block/mixer_base_side.png | Bin 0 -> 402 bytes .../create/textures/block/mixer_head.png | Bin 0 -> 470 bytes .../data/create/loot_tables/blocks/basin.json | 19 + .../loot_tables/blocks/mechanical_mixer.json | 19 + 64 files changed, 2450 insertions(+), 89 deletions(-) delete mode 100644 src/main/java/com/simibubi/create/compat/jei/AnimationTickHolder.java create mode 100644 src/main/java/com/simibubi/create/foundation/utility/AnimationTickHolder.java create mode 100644 src/main/java/com/simibubi/create/modules/contraptions/WrenchItem.java create mode 100644 src/main/java/com/simibubi/create/modules/contraptions/WrenchItemRenderer.java create mode 100644 src/main/java/com/simibubi/create/modules/contraptions/WrenchModel.java create mode 100644 src/main/java/com/simibubi/create/modules/contraptions/receivers/BasinBlock.java create mode 100644 src/main/java/com/simibubi/create/modules/contraptions/receivers/BasinTileEntity.java create mode 100644 src/main/java/com/simibubi/create/modules/contraptions/receivers/BasinTileEntityRenderer.java create mode 100644 src/main/java/com/simibubi/create/modules/contraptions/receivers/ConfigureMixerPacket.java create mode 100644 src/main/java/com/simibubi/create/modules/contraptions/receivers/MechanicalMixerBlock.java create mode 100644 src/main/java/com/simibubi/create/modules/contraptions/receivers/MechanicalMixerTileEntity.java create mode 100644 src/main/java/com/simibubi/create/modules/contraptions/receivers/MechanicalMixerTileEntityRenderer.java create mode 100644 src/main/resources/assets/create/blockstates/basin.json create mode 100644 src/main/resources/assets/create/blockstates/mechanical_mixer.json create mode 100644 src/main/resources/assets/create/blockstates/mechanical_mixer_head.json create mode 100644 src/main/resources/assets/create/blockstates/mechanical_mixer_pole.json create mode 100644 src/main/resources/assets/create/blockstates/shaftless_cogwheel.json create mode 100644 src/main/resources/assets/create/models/block/basin.json create mode 100644 src/main/resources/assets/create/models/block/cogwheel_shaftless.json create mode 100644 src/main/resources/assets/create/models/block/mixer_base.json create mode 100644 src/main/resources/assets/create/models/block/mixer_head.json create mode 100644 src/main/resources/assets/create/models/block/mixer_pole.json create mode 100644 src/main/resources/assets/create/models/item/basin.json create mode 100644 src/main/resources/assets/create/models/item/deforester/deforester.bbmodel create mode 100644 src/main/resources/assets/create/models/item/mechanical_mixer.json create mode 100644 src/main/resources/assets/create/models/item/wrench.json create mode 100644 src/main/resources/assets/create/models/item/wrench/gear.json create mode 100644 src/main/resources/assets/create/models/item/wrench/wrench.bbmodel create mode 100644 src/main/resources/assets/create/textures/block/basin.png create mode 100644 src/main/resources/assets/create/textures/block/mixer_base_side.png create mode 100644 src/main/resources/assets/create/textures/block/mixer_head.png create mode 100644 src/main/resources/data/create/loot_tables/blocks/basin.json create mode 100644 src/main/resources/data/create/loot_tables/blocks/mechanical_mixer.json diff --git a/src/main/java/com/simibubi/create/AllBlocks.java b/src/main/java/com/simibubi/create/AllBlocks.java index aa30de544..77473549e 100644 --- a/src/main/java/com/simibubi/create/AllBlocks.java +++ b/src/main/java/com/simibubi/create/AllBlocks.java @@ -9,11 +9,14 @@ import com.simibubi.create.foundation.utility.Lang; import com.simibubi.create.modules.IModule; import com.simibubi.create.modules.contraptions.generators.MotorBlock; import com.simibubi.create.modules.contraptions.generators.WaterWheelBlock; +import com.simibubi.create.modules.contraptions.receivers.BasinBlock; import com.simibubi.create.modules.contraptions.receivers.CrushingWheelBlock; import com.simibubi.create.modules.contraptions.receivers.CrushingWheelControllerBlock; import com.simibubi.create.modules.contraptions.receivers.DrillBlock; import com.simibubi.create.modules.contraptions.receivers.EncasedFanBlock; import com.simibubi.create.modules.contraptions.receivers.HarvesterBlock; +import com.simibubi.create.modules.contraptions.receivers.MechanicalMixerBlock; +import com.simibubi.create.modules.contraptions.receivers.MechanicalMixerBlock.MechanicalMixerBlockItem; import com.simibubi.create.modules.contraptions.receivers.MechanicalPressBlock; import com.simibubi.create.modules.contraptions.receivers.TurntableBlock; import com.simibubi.create.modules.contraptions.receivers.constructs.MechanicalBearingBlock; @@ -84,6 +87,7 @@ public enum AllBlocks { SHAFT(new ShaftBlock(Properties.from(Blocks.ANDESITE))), COGWHEEL(new CogWheelBlock(false)), LARGE_COGWHEEL(new CogWheelBlock(true)), + SHAFTLESS_COGWHEEL(new RenderUtilityAxisBlock()), ENCASED_SHAFT(new EncasedShaftBlock()), ENCASED_BELT(new EncasedBeltBlock()), CLUTCH(new ClutchBlock()), @@ -99,10 +103,16 @@ public enum AllBlocks { ENCASED_FAN_INNER(new RenderUtilityAxisBlock()), TURNTABLE(new TurntableBlock()), SHAFT_HALF(new ShaftHalfBlock()), + CRUSHING_WHEEL(new CrushingWheelBlock()), CRUSHING_WHEEL_CONTROLLER(new CrushingWheelControllerBlock()), MECHANICAL_PRESS(new MechanicalPressBlock()), MECHANICAL_PRESS_HEAD(new MechanicalPressBlock.Head()), + MECHANICAL_MIXER(new MechanicalMixerBlock()), + MECHANICAL_MIXER_POLE(new RenderUtilityBlock()), + MECHANICAL_MIXER_HEAD(new RenderUtilityBlock()), + BASIN(new BasinBlock()), + MECHANICAL_PISTON(new MechanicalPistonBlock(false)), STICKY_MECHANICAL_PISTON(new MechanicalPistonBlock(true)), MECHANICAL_PISTON_HEAD(new MechanicalPistonHeadBlock()), @@ -139,7 +149,7 @@ public enum AllBlocks { __PALETTES__(), TILED_GLASS(new GlassBlock(Properties.from(Blocks.GLASS))), TILED_GLASS_PANE(new GlassPaneBlock(Properties.from(Blocks.GLASS))), - + ANDESITE_BRICKS(new Block(Properties.from(Blocks.ANDESITE))), DIORITE_BRICKS(new Block(Properties.from(Blocks.DIORITE))), GRANITE_BRICKS(new Block(Properties.from(Blocks.GRANITE))), @@ -223,8 +233,15 @@ public enum AllBlocks { } private static void registerAsItem(IForgeRegistry registry, Block blockIn) { - registry.register( - new BlockItem(blockIn, AllItems.standardItemProperties()).setRegistryName(blockIn.getRegistryName())); + BlockItem blockItem = null; + net.minecraft.item.Item.Properties standardItemProperties = AllItems.standardItemProperties(); + + if (blockIn == AllBlocks.MECHANICAL_MIXER.get()) + blockItem = new MechanicalMixerBlockItem(standardItemProperties); + else + blockItem = new BlockItem(blockIn, standardItemProperties); + + registry.register(blockItem.setRegistryName(blockIn.getRegistryName())); } public Block get() { @@ -259,8 +276,7 @@ public enum AllBlocks { return null; } - return featured.setRegistryName(Create.ID, - block.getRegistryName().getPath() + "_" + Lang.asId(feature.name())); + return featured.setRegistryName(Create.ID, block.getRegistryName().getPath() + "_" + Lang.asId(feature.name())); } @OnlyIn(Dist.CLIENT) diff --git a/src/main/java/com/simibubi/create/AllItems.java b/src/main/java/com/simibubi/create/AllItems.java index 8b3bee9e3..e09a94b2b 100644 --- a/src/main/java/com/simibubi/create/AllItems.java +++ b/src/main/java/com/simibubi/create/AllItems.java @@ -3,6 +3,8 @@ package com.simibubi.create; import com.simibubi.create.foundation.item.IItemWithColorHandler; import com.simibubi.create.foundation.utility.Lang; import com.simibubi.create.modules.IModule; +import com.simibubi.create.modules.contraptions.WrenchItem; +import com.simibubi.create.modules.contraptions.WrenchItemRenderer; import com.simibubi.create.modules.contraptions.relays.VerticalGearboxItem; import com.simibubi.create.modules.contraptions.relays.belt.BeltItem; import com.simibubi.create.modules.curiosities.ChromaticCompoundCubeItem; @@ -76,6 +78,7 @@ public enum AllItems { FLOUR(ingredient()), DOUGH(ingredient()), PROPELLER(ingredient()), + WRENCH(new WrenchItem(standardItemProperties().setTEISR(() -> () -> renderUsing(AllItemRenderers.WRENCH)))), ; @@ -134,7 +137,7 @@ public enum AllItems { // Client private enum AllItemRenderers { - SYMMETRY_WAND, BUILDER_GUN,; + SYMMETRY_WAND, BUILDER_GUN, WRENCH; } @OnlyIn(Dist.CLIENT) @@ -155,6 +158,8 @@ public enum AllItems { return new SymmetryWandItemRenderer(); case BUILDER_GUN: return new BuilderGunItemRenderer(); + case WRENCH: + return new WrenchItemRenderer(); default: return null; } diff --git a/src/main/java/com/simibubi/create/AllPackets.java b/src/main/java/com/simibubi/create/AllPackets.java index 4cda41e0c..490713fd8 100644 --- a/src/main/java/com/simibubi/create/AllPackets.java +++ b/src/main/java/com/simibubi/create/AllPackets.java @@ -7,6 +7,7 @@ import java.util.function.Supplier; import com.simibubi.create.foundation.packet.NbtPacket; import com.simibubi.create.foundation.packet.SimplePacketBase; import com.simibubi.create.modules.contraptions.generators.ConfigureMotorPacket; +import com.simibubi.create.modules.contraptions.receivers.ConfigureMixerPacket; import com.simibubi.create.modules.contraptions.receivers.constructs.ConfigureChassisPacket; import com.simibubi.create.modules.curiosities.placementHandgun.BuilderGunBeamPacket; import com.simibubi.create.modules.curiosities.symmetry.SymmetryEffectPacket; @@ -33,6 +34,7 @@ public enum AllPackets { CONFIGURE_CHASSIS(ConfigureChassisPacket.class, ConfigureChassisPacket::new), CONFIGURE_MOTOR(ConfigureMotorPacket.class, ConfigureMotorPacket::new), CONFIGURE_FLEXPEATER(ConfigureFlexpeaterPacket.class, ConfigureFlexpeaterPacket::new), + CONFIGURE_MIXER(ConfigureMixerPacket.class, ConfigureMixerPacket::new), PLACE_SCHEMATIC(SchematicPlacePacket.class, SchematicPlacePacket::new), UPLOAD_SCHEMATIC(SchematicUploadPacket.class, SchematicUploadPacket::new), diff --git a/src/main/java/com/simibubi/create/AllTileEntities.java b/src/main/java/com/simibubi/create/AllTileEntities.java index 5beacae39..96be84668 100644 --- a/src/main/java/com/simibubi/create/AllTileEntities.java +++ b/src/main/java/com/simibubi/create/AllTileEntities.java @@ -7,11 +7,15 @@ import com.simibubi.create.modules.contraptions.base.KineticTileEntityRenderer; import com.simibubi.create.modules.contraptions.generators.MotorTileEntity; import com.simibubi.create.modules.contraptions.generators.MotorTileEntityRenderer; import com.simibubi.create.modules.contraptions.generators.WaterWheelTileEntity; +import com.simibubi.create.modules.contraptions.receivers.BasinTileEntity; +import com.simibubi.create.modules.contraptions.receivers.BasinTileEntityRenderer; import com.simibubi.create.modules.contraptions.receivers.CrushingWheelControllerTileEntity; import com.simibubi.create.modules.contraptions.receivers.CrushingWheelTileEntity; import com.simibubi.create.modules.contraptions.receivers.DrillTileEntity; import com.simibubi.create.modules.contraptions.receivers.EncasedFanTileEntity; import com.simibubi.create.modules.contraptions.receivers.EncasedFanTileEntityRenderer; +import com.simibubi.create.modules.contraptions.receivers.MechanicalMixerTileEntity; +import com.simibubi.create.modules.contraptions.receivers.MechanicalMixerTileEntityRenderer; import com.simibubi.create.modules.contraptions.receivers.MechanicalPressTileEntity; import com.simibubi.create.modules.contraptions.receivers.MechanicalPressTileEntityRenderer; import com.simibubi.create.modules.contraptions.receivers.TurntableTileEntity; @@ -82,6 +86,8 @@ public enum AllTileEntities { CRUSHING_WHEEL_CONTROLLER(CrushingWheelControllerTileEntity::new, AllBlocks.CRUSHING_WHEEL_CONTROLLER), WATER_WHEEL(WaterWheelTileEntity::new, AllBlocks.WATER_WHEEL), MECHANICAL_PRESS(MechanicalPressTileEntity::new, AllBlocks.MECHANICAL_PRESS), + MECHANICAL_MIXER(MechanicalMixerTileEntity::new, AllBlocks.MECHANICAL_MIXER), + BASIN(BasinTileEntity::new, AllBlocks.BASIN), // Logistics REDSTONE_BRIDGE(RedstoneBridgeTileEntity::new, AllBlocks.REDSTONE_BRIDGE), @@ -143,6 +149,8 @@ public enum AllTileEntities { bind(EntityDetectorTileEntity.class, new EntityDetectorTileEntityRenderer()); bind(MechanicalPressTileEntity.class, new MechanicalPressTileEntityRenderer()); bind(FlexpeaterTileEntity.class, new FlexpeaterTileEntityRenderer()); + bind(MechanicalMixerTileEntity.class, new MechanicalMixerTileEntityRenderer()); + bind(BasinTileEntity.class, new BasinTileEntityRenderer()); } @OnlyIn(Dist.CLIENT) diff --git a/src/main/java/com/simibubi/create/ClientEvents.java b/src/main/java/com/simibubi/create/ClientEvents.java index a77b9bdd2..0e8739337 100644 --- a/src/main/java/com/simibubi/create/ClientEvents.java +++ b/src/main/java/com/simibubi/create/ClientEvents.java @@ -3,9 +3,9 @@ package com.simibubi.create; import java.util.ArrayList; import java.util.List; -import com.simibubi.create.compat.jei.AnimationTickHolder; import com.simibubi.create.foundation.block.IBlockWithScrollableValue; import com.simibubi.create.foundation.gui.ScreenOpener; +import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.TooltipHelper; import com.simibubi.create.modules.contraptions.receivers.TurntableHandler; import com.simibubi.create.modules.contraptions.relays.belt.BeltItemHandler; diff --git a/src/main/java/com/simibubi/create/CreateClient.java b/src/main/java/com/simibubi/create/CreateClient.java index cec3d53db..dad8d1a47 100644 --- a/src/main/java/com/simibubi/create/CreateClient.java +++ b/src/main/java/com/simibubi/create/CreateClient.java @@ -4,6 +4,7 @@ import java.util.Map; import java.util.function.Function; import com.simibubi.create.modules.contraptions.CachedBufferReloader; +import com.simibubi.create.modules.contraptions.WrenchModel; import com.simibubi.create.modules.contraptions.receivers.EncasedFanParticleHandler; import com.simibubi.create.modules.curiosities.partialWindows.WindowInABlockModel; import com.simibubi.create.modules.curiosities.placementHandgun.BuilderGunModel; @@ -38,7 +39,8 @@ public class CreateClient { public static SchematicHologram schematicHologram; public static SchematicAndQuillHandler schematicAndQuillHandler; public static EncasedFanParticleHandler fanParticles; - + public static int renderTicks; + public static ModConfig config; public static void addListeners(IEventBus modEventBus) { @@ -90,6 +92,8 @@ public class CreateClient { t -> new SymmetryWandModel(t).loadPartials(event)); swapModels(modelRegistry, getItemModelLocation(AllItems.PLACEMENT_HANDGUN), t -> new BuilderGunModel(t).loadPartials(event)); + swapModels(modelRegistry, getItemModelLocation(AllItems.WRENCH), + t -> new WrenchModel(t).loadPartials(event)); swapModels(modelRegistry, getBlockModelLocation(AllBlocks.WINDOW_IN_A_BLOCK, BlockModelShapes @@ -108,6 +112,8 @@ public class CreateClient { ModelLoader.addSpecialModel(new ResourceLocation(Create.ID, "item/" + location)); for (String location : BuilderGunModel.getCustomModelLocations()) ModelLoader.addSpecialModel(new ResourceLocation(Create.ID, "item/" + location)); + for (String location : WrenchModel.getCustomModelLocations()) + ModelLoader.addSpecialModel(new ResourceLocation(Create.ID, "item/" + location)); } protected static ModelResourceLocation getItemModelLocation(AllItems item) { diff --git a/src/main/java/com/simibubi/create/compat/jei/AnimatedKinetics.java b/src/main/java/com/simibubi/create/compat/jei/AnimatedKinetics.java index b4b443060..fb6a74602 100644 --- a/src/main/java/com/simibubi/create/compat/jei/AnimatedKinetics.java +++ b/src/main/java/com/simibubi/create/compat/jei/AnimatedKinetics.java @@ -1,5 +1,7 @@ package com.simibubi.create.compat.jei; +import com.simibubi.create.foundation.utility.AnimationTickHolder; + import mezz.jei.api.gui.drawable.IDrawable; import net.minecraft.client.Minecraft; diff --git a/src/main/java/com/simibubi/create/compat/jei/AnimatedPress.java b/src/main/java/com/simibubi/create/compat/jei/AnimatedPress.java index 4980040e3..d6425d3f9 100644 --- a/src/main/java/com/simibubi/create/compat/jei/AnimatedPress.java +++ b/src/main/java/com/simibubi/create/compat/jei/AnimatedPress.java @@ -1,6 +1,6 @@ package com.simibubi.create.compat.jei; -import static com.simibubi.create.compat.jei.AnimationTickHolder.ticks; +import static com.simibubi.create.foundation.utility.AnimationTickHolder.ticks; import com.mojang.blaze3d.platform.GlStateManager; import com.simibubi.create.AllBlocks; diff --git a/src/main/java/com/simibubi/create/compat/jei/AnimationTickHolder.java b/src/main/java/com/simibubi/create/compat/jei/AnimationTickHolder.java deleted file mode 100644 index 08c03df78..000000000 --- a/src/main/java/com/simibubi/create/compat/jei/AnimationTickHolder.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.simibubi.create.compat.jei; - -public class AnimationTickHolder { - - protected static int ticks; - - public static void tick() { - ticks++; - } - -} diff --git a/src/main/java/com/simibubi/create/foundation/block/IBlockWithScrollableValue.java b/src/main/java/com/simibubi/create/foundation/block/IBlockWithScrollableValue.java index be4266385..3d064a79d 100644 --- a/src/main/java/com/simibubi/create/foundation/block/IBlockWithScrollableValue.java +++ b/src/main/java/com/simibubi/create/foundation/block/IBlockWithScrollableValue.java @@ -1,6 +1,7 @@ package com.simibubi.create.foundation.block; import com.mojang.blaze3d.platform.GlStateManager; +import com.simibubi.create.AllItems; import com.simibubi.create.foundation.utility.Lang; import com.simibubi.create.foundation.utility.TessellatorHelper; import com.simibubi.create.foundation.utility.VecHelper; @@ -42,10 +43,18 @@ public interface IBlockWithScrollableValue { public Direction getValueBoxDirection(BlockState state, IWorld world, BlockPos pos); - public default boolean isValueOnAllSides() { + public default boolean isValueOnMultipleFaces() { return false; } + public default boolean requiresWrench() { + return false; + } + + public default boolean isValueOnFace(Direction face) { + return true; + } + public default String getValueSuffix(BlockState state, IWorld world, BlockPos pos) { return ""; } @@ -70,11 +79,16 @@ public interface IBlockWithScrollableValue { IBlockWithScrollableValue block = (IBlockWithScrollableValue) state.getBlock(); Vec3d pos = new Vec3d(blockPos); + if (block.requiresWrench() && !AllItems.WRENCH.typeOf(mc.player.getHeldItemMainhand())) + return; + Vec3d valueBoxPosition = block.getValueBoxPosition(state, world, blockPos); AxisAlignedBB bb = VALUE_BB.offset(valueBoxPosition); bb = bb.grow(1 / 128f); - Direction facing = block.isValueOnAllSides() ? result.getFace() + Direction facing = block.isValueOnMultipleFaces() ? result.getFace() : block.getValueBoxDirection(state, world, blockPos); + if (block.isValueOnMultipleFaces() && !block.isValueOnFace(result.getFace())) + return; Vec3d cursor = result.getHitVec().subtract(VecHelper.getCenterOf(blockPos)); cursor = VecHelper.rotate(cursor, facing.getHorizontalAngle() + 90, Axis.Y); @@ -185,10 +199,14 @@ public interface IBlockWithScrollableValue { return false; IBlockWithScrollableValue block = (IBlockWithScrollableValue) state.getBlock(); + + if (block.requiresWrench() && !AllItems.WRENCH.typeOf(mc.player.getHeldItemMainhand())) + return false; + Vec3d valueBoxPosition = block.getValueBoxPosition(state, world, blockPos); AxisAlignedBB bb = VALUE_BB.offset(valueBoxPosition); bb = bb.grow(1 / 128f); - Direction facing = block.isValueOnAllSides() ? result.getFace() + Direction facing = block.isValueOnMultipleFaces() ? result.getFace() : block.getValueBoxDirection(state, world, blockPos); Vec3d cursor = result.getHitVec().subtract(VecHelper.getCenterOf(blockPos)); diff --git a/src/main/java/com/simibubi/create/foundation/utility/AnimationTickHolder.java b/src/main/java/com/simibubi/create/foundation/utility/AnimationTickHolder.java new file mode 100644 index 000000000..d4388cd2f --- /dev/null +++ b/src/main/java/com/simibubi/create/foundation/utility/AnimationTickHolder.java @@ -0,0 +1,17 @@ +package com.simibubi.create.foundation.utility; + +import net.minecraft.client.Minecraft; + +public class AnimationTickHolder { + + public static int ticks; + + public static void tick() { + ticks++; + } + + public static float getRenderTick() { + return (ticks + Minecraft.getInstance().getRenderPartialTicks()) / 20; + } + +} diff --git a/src/main/java/com/simibubi/create/modules/contraptions/RotationPropagator.java b/src/main/java/com/simibubi/create/modules/contraptions/RotationPropagator.java index ba76a2a65..39b037ba9 100644 --- a/src/main/java/com/simibubi/create/modules/contraptions/RotationPropagator.java +++ b/src/main/java/com/simibubi/create/modules/contraptions/RotationPropagator.java @@ -45,8 +45,16 @@ public class RotationPropagator { final Direction direction = Direction.getFacingFromVector(diff.getX(), diff.getY(), diff.getZ()); final World world = from.getWorld(); - boolean connectedByAxis = definitionFrom.hasShaftTowards(world, from.getPos(), stateFrom, direction) + boolean alignedAxes = true; + for (Axis axis : Axis.values()) + if (axis != direction.getAxis()) + if (axis.getCoordinate(diff.getX(), diff.getY(), diff.getZ()) != 0) + alignedAxes = false; + + boolean connectedByAxis = alignedAxes + && definitionFrom.hasShaftTowards(world, from.getPos(), stateFrom, direction) && definitionTo.hasShaftTowards(world, to.getPos(), stateTo, direction.getOpposite()); + boolean connectedByGears = definitionFrom.hasCogsTowards(world, from.getPos(), stateFrom, direction) && definitionTo.hasCogsTowards(world, to.getPos(), stateTo, direction.getOpposite()); @@ -55,10 +63,6 @@ public class RotationPropagator { return ((BeltTileEntity) from).getController().equals(((BeltTileEntity) to).getController()) ? 1 : 0; } - // Gearbox <-> Gearbox - if (from instanceof GearboxTileEntity && to instanceof GearboxTileEntity) - return 0; - // Axis <-> Axis if (connectedByAxis) { return getAxisModifier(from, direction) * getAxisModifier(to, direction.getOpposite()); @@ -84,7 +88,7 @@ public class RotationPropagator { Axis targetAxis = stateTo.get(AXIS); int sourceAxisDiff = sourceAxis.getCoordinate(diff.getX(), diff.getY(), diff.getZ()); int targetAxisDiff = targetAxis.getCoordinate(diff.getX(), diff.getY(), diff.getZ()); - + return sourceAxisDiff > 0 ^ targetAxisDiff > 0 ? -1 : 1; } @@ -100,7 +104,7 @@ public class RotationPropagator { return 0; if (LARGE_COGWHEEL.typeOf(stateTo)) return 0; - if (stateFrom.get(AXIS) == stateTo.get(AXIS)) + if (definitionFrom.getRotationAxis(stateFrom) == definitionTo.getRotationAxis(stateTo)) return -1; } diff --git a/src/main/java/com/simibubi/create/modules/contraptions/WrenchItem.java b/src/main/java/com/simibubi/create/modules/contraptions/WrenchItem.java new file mode 100644 index 000000000..48c8018e2 --- /dev/null +++ b/src/main/java/com/simibubi/create/modules/contraptions/WrenchItem.java @@ -0,0 +1,48 @@ +package com.simibubi.create.modules.contraptions; + +import com.simibubi.create.modules.contraptions.base.IRotate; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockState; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemUseContext; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import net.minecraft.world.server.ServerWorld; + +public class WrenchItem extends Item { + + public WrenchItem(Properties properties) { + super(properties); + } + + @Override + public ActionResultType onItemUse(ItemUseContext context) { + PlayerEntity player = context.getPlayer(); + if (!player.isAllowEdit()) + return super.onItemUse(context); + + World world = context.getWorld(); + BlockPos pos = context.getPos(); + BlockState state = world.getBlockState(pos); + if (!(state.getBlock() instanceof IRotate)) + return super.onItemUse(context); + IRotate actor = (IRotate) state.getBlock(); + + if (player.isSneaking()) { + if (world instanceof ServerWorld) { + if (!player.isCreative()) + Block.getDrops(state, (ServerWorld) world, pos, world.getTileEntity(pos)).forEach(itemStack -> { + player.inventory.placeItemBackInInventory(world, itemStack); + }); + world.destroyBlock(pos, false); + } + return ActionResultType.SUCCESS; + } + + return actor.onWrenched(state, context); + } + +} diff --git a/src/main/java/com/simibubi/create/modules/contraptions/WrenchItemRenderer.java b/src/main/java/com/simibubi/create/modules/contraptions/WrenchItemRenderer.java new file mode 100644 index 000000000..68c21b399 --- /dev/null +++ b/src/main/java/com/simibubi/create/modules/contraptions/WrenchItemRenderer.java @@ -0,0 +1,37 @@ +package com.simibubi.create.modules.contraptions; + +import com.mojang.blaze3d.platform.GlStateManager; +import com.simibubi.create.foundation.utility.AnimationTickHolder; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.ItemRenderer; +import net.minecraft.client.renderer.tileentity.ItemStackTileEntityRenderer; +import net.minecraft.item.ItemStack; + +public class WrenchItemRenderer extends ItemStackTileEntityRenderer { + + @Override + public void renderByItem(ItemStack stack) { + + ItemRenderer itemRenderer = Minecraft.getInstance().getItemRenderer(); + WrenchModel mainModel = (WrenchModel) itemRenderer.getModelWithOverrides(stack); + float worldTime = AnimationTickHolder.getRenderTick(); + + GlStateManager.pushMatrix(); + GlStateManager.translatef(0.5F, 0.5F, 0.5F); + itemRenderer.renderItem(stack, mainModel.getBakedModel()); + + float angle = worldTime * -10 % 360; + + float xOffset = -1/32f; + float zOffset = 0; + GlStateManager.translatef(-xOffset, 0, -zOffset); + GlStateManager.rotated(angle, 0, 1, 0); + GlStateManager.translatef(xOffset, 0, zOffset); + + itemRenderer.renderItem(stack, mainModel.gear); + + GlStateManager.popMatrix(); + } + +} diff --git a/src/main/java/com/simibubi/create/modules/contraptions/WrenchModel.java b/src/main/java/com/simibubi/create/modules/contraptions/WrenchModel.java new file mode 100644 index 000000000..a6544bb1b --- /dev/null +++ b/src/main/java/com/simibubi/create/modules/contraptions/WrenchModel.java @@ -0,0 +1,29 @@ +package com.simibubi.create.modules.contraptions; + +import java.util.Arrays; +import java.util.List; + +import com.simibubi.create.foundation.block.CustomRenderItemBakedModel; + +import net.minecraft.client.renderer.model.IBakedModel; +import net.minecraftforge.client.event.ModelBakeEvent; + +public class WrenchModel extends CustomRenderItemBakedModel { + + public IBakedModel gear; + + public WrenchModel(IBakedModel template) { + super(template); + } + + public static List getCustomModelLocations() { + return Arrays.asList("gear"); + } + + @Override + public CustomRenderItemBakedModel loadPartials(ModelBakeEvent event) { + this.gear = loadCustomModel(event, "wrench/gear"); + return this; + } + +} diff --git a/src/main/java/com/simibubi/create/modules/contraptions/base/IRotate.java b/src/main/java/com/simibubi/create/modules/contraptions/base/IRotate.java index d676176c7..7a5abf1d9 100644 --- a/src/main/java/com/simibubi/create/modules/contraptions/base/IRotate.java +++ b/src/main/java/com/simibubi/create/modules/contraptions/base/IRotate.java @@ -1,6 +1,8 @@ package com.simibubi.create.modules.contraptions.base; import net.minecraft.block.BlockState; +import net.minecraft.item.ItemUseContext; +import net.minecraft.util.ActionResultType; import net.minecraft.util.Direction; import net.minecraft.util.Direction.Axis; import net.minecraft.util.math.BlockPos; @@ -9,8 +11,13 @@ import net.minecraft.world.World; public interface IRotate { public boolean hasShaftTowards(World world, BlockPos pos, BlockState state, Direction face); + public boolean hasCogsTowards(World world, BlockPos pos, BlockState state, Direction face); - + public Axis getRotationAxis(BlockState state); - + + public default ActionResultType onWrenched(BlockState state, ItemUseContext context) { + return ActionResultType.PASS; + } + } diff --git a/src/main/java/com/simibubi/create/modules/contraptions/base/KineticTileEntityRenderer.java b/src/main/java/com/simibubi/create/modules/contraptions/base/KineticTileEntityRenderer.java index 6d7b876ae..3242de31b 100644 --- a/src/main/java/com/simibubi/create/modules/contraptions/base/KineticTileEntityRenderer.java +++ b/src/main/java/com/simibubi/create/modules/contraptions/base/KineticTileEntityRenderer.java @@ -9,6 +9,7 @@ import java.util.function.Function; import org.lwjgl.opengl.GL11; import com.simibubi.create.AllBlocks; +import com.simibubi.create.foundation.utility.AnimationTickHolder; import com.simibubi.create.foundation.utility.BufferManipulator; import net.minecraft.block.BlockState; @@ -22,7 +23,6 @@ import net.minecraft.util.Direction.Axis; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.MathHelper; import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.client.model.animation.Animation; import net.minecraftforge.client.model.animation.TileEntityRendererFast; import net.minecraftforge.client.model.data.EmptyModelData; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; @@ -73,7 +73,7 @@ public class KineticTileEntityRenderer extends TileEntityRendererFast { + + public static final VoxelShape SHAPE = makeCuboidShape(0, 0, 0, 16, 13, 16); + + public BasinBlock() { + super(Properties.from(Blocks.ANDESITE)); + } + + @Override + public boolean hasTileEntity(BlockState state) { + return true; + } + + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) { + return new BasinTileEntity(); + } + + @Override + public boolean onBlockActivated(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, + BlockRayTraceResult hit) { + if (!player.getHeldItem(handIn).isEmpty()) + return false; + if (worldIn.getTileEntity(pos) == null) + return false; + + BasinTileEntity te = (BasinTileEntity) worldIn.getTileEntity(pos); + IItemHandlerModifiable inv = te.inventory.orElse(new ItemStackHandler(1)); + for (int slot = 0; slot < inv.getSlots(); slot++) { + player.inventory.placeItemBackInInventory(worldIn, inv.getStackInSlot(slot)); + inv.setStackInSlot(slot, ItemStack.EMPTY); + } + te.onEmptied(); + + return true; + } + + @Override + public void onLanded(IBlockReader worldIn, Entity entityIn) { + super.onLanded(worldIn, entityIn); + if (!AllBlocks.BASIN.typeOf(worldIn.getBlockState(entityIn.getPosition()))) + return; + if (!(entityIn instanceof ItemEntity)) + return; + if (!entityIn.isAlive()) + return; + + BasinTileEntity te = (BasinTileEntity) worldIn.getTileEntity(entityIn.getPosition()); + ItemEntity itemEntity = (ItemEntity) entityIn; + ItemStack insertItem = ItemHandlerHelper.insertItem(te.inputInventory, itemEntity.getItem().copy(), false); + + if (insertItem.isEmpty()) { + itemEntity.remove(); + return; + } + + itemEntity.setItem(insertItem); + + } + + @Override + public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) { + return SHAPE; + } + + @Override + public void onReplaced(BlockState state, World worldIn, BlockPos pos, BlockState newState, boolean isMoving) { + if (worldIn.getTileEntity(pos) == null) + return; + + BasinTileEntity te = (BasinTileEntity) worldIn.getTileEntity(pos); + IItemHandlerModifiable inv = te.inventory.orElse(new ItemStackHandler(1)); + for (int slot = 0; slot < inv.getSlots(); slot++) { + InventoryHelper.spawnItemStack(worldIn, pos.getX(), pos.getY(), pos.getZ(), + inv.getStackInSlot(slot)); + } + + if (state.hasTileEntity() && state.getBlock() != newState.getBlock()) { + worldIn.removeTileEntity(pos); + } + + } + + @Override + public boolean isSolid(BlockState state) { + return false; + } + +} diff --git a/src/main/java/com/simibubi/create/modules/contraptions/receivers/BasinTileEntity.java b/src/main/java/com/simibubi/create/modules/contraptions/receivers/BasinTileEntity.java new file mode 100644 index 000000000..eddbc3e5b --- /dev/null +++ b/src/main/java/com/simibubi/create/modules/contraptions/receivers/BasinTileEntity.java @@ -0,0 +1,129 @@ +package com.simibubi.create.modules.contraptions.receivers; + +import com.simibubi.create.AllTileEntities; +import com.simibubi.create.foundation.block.SyncedTileEntity; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.tileentity.ITickableTileEntity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Direction; +import net.minecraftforge.common.capabilities.Capability; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.IItemHandlerModifiable; +import net.minecraftforge.items.ItemStackHandler; +import net.minecraftforge.items.wrapper.CombinedInvWrapper; + +public class BasinTileEntity extends SyncedTileEntity implements ITickableTileEntity { + + protected boolean updateProcessing; + + protected ItemStackHandler outputInventory = new ItemStackHandler(9) { + protected void onContentsChanged(int slot) { + sendData(); + markDirty(); + } + }; + + protected ItemStackHandler inputInventory = new ItemStackHandler(9) { + protected void onContentsChanged(int slot) { + updateProcessing = true; + sendData(); + markDirty(); + }; + }; + + public static class BasinInventory extends CombinedInvWrapper { + public BasinInventory(ItemStackHandler input, ItemStackHandler output) { + super(input, output); + } + + @Override + public ItemStack extractItem(int slot, int amount, boolean simulate) { + if (isInput(slot)) + return ItemStack.EMPTY; + return super.extractItem(slot, amount, simulate); + } + + @Override + public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) { + if (!isInput(slot)) + return stack; + return super.insertItem(slot, stack, simulate); + } + + public boolean isInput(int slot) { + return getIndexForSlot(slot) == 0; + } + + public IItemHandlerModifiable getInputHandler() { + return itemHandler[0]; + } + + public IItemHandlerModifiable getOutputHandler() { + return itemHandler[1]; + } + + } + + protected LazyOptional inventory = LazyOptional + .of(() -> new BasinInventory(inputInventory, outputInventory)); + + public BasinTileEntity() { + super(AllTileEntities.BASIN.type); + updateProcessing = true; + } + + @Override + public void read(CompoundNBT compound) { + super.read(compound); + inputInventory.deserializeNBT(compound.getCompound("InputItems")); + outputInventory.deserializeNBT(compound.getCompound("OutputItems")); + } + + @Override + public CompoundNBT write(CompoundNBT compound) { + super.write(compound); + compound.put("InputItems", inputInventory.serializeNBT()); + compound.put("OutputItems", outputInventory.serializeNBT()); + return compound; + } + + public void onEmptied() { + TileEntity te = world.getTileEntity(pos.up(2)); + if (te == null) + return; + if (te instanceof MechanicalMixerTileEntity) + ((MechanicalMixerTileEntity) te).basinRemoved = true; + } + + @Override + public void remove() { + onEmptied(); + inventory.invalidate(); + super.remove(); + } + + @Override + public LazyOptional getCapability(Capability cap, Direction side) { + if (cap == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY) + return inventory.cast(); + return super.getCapability(cap, side); + } + + @Override + public void tick() { + if (!updateProcessing) + return; + updateProcessing = false; + + TileEntity te = world.getTileEntity(pos.up(2)); + if (te == null) + return; + if (te instanceof MechanicalMixerTileEntity) + ((MechanicalMixerTileEntity) te).checkBasin = true; + + } + +} diff --git a/src/main/java/com/simibubi/create/modules/contraptions/receivers/BasinTileEntityRenderer.java b/src/main/java/com/simibubi/create/modules/contraptions/receivers/BasinTileEntityRenderer.java new file mode 100644 index 000000000..82734a9b6 --- /dev/null +++ b/src/main/java/com/simibubi/create/modules/contraptions/receivers/BasinTileEntityRenderer.java @@ -0,0 +1,51 @@ +package com.simibubi.create.modules.contraptions.receivers; + +import java.util.Random; + +import com.mojang.blaze3d.platform.GlStateManager; +import com.simibubi.create.foundation.utility.VecHelper; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.model.ItemCameraTransforms.TransformType; +import net.minecraft.client.renderer.tileentity.TileEntityRenderer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; +import net.minecraftforge.items.IItemHandlerModifiable; +import net.minecraftforge.items.ItemStackHandler; + +@SuppressWarnings("deprecation") +public class BasinTileEntityRenderer extends TileEntityRenderer { + + @Override + public void render(BasinTileEntity basin, double x, double y, double z, float partialTicks, int destroyStage) { + super.render(basin, x, y, z, partialTicks, destroyStage); + + GlStateManager.pushMatrix(); + BlockPos pos = basin.getPos(); + GlStateManager.translated(x + .5, y + .2f, z + .5); + Random r = new Random(pos.hashCode()); + + IItemHandlerModifiable inv = basin.inventory.orElse(new ItemStackHandler()); + for (int slot = 0; slot < inv.getSlots(); slot++) { + ItemStack stack = inv.getStackInSlot(slot); + if (stack.isEmpty()) + continue; + + for (int i = 0; i <= stack.getCount() / 8; i++) { + GlStateManager.pushMatrix(); + Vec3d vec = VecHelper.offsetRandomly(Vec3d.ZERO, r, .25f); + Vec3d vec2 = VecHelper.offsetRandomly(Vec3d.ZERO, r, .5f); + GlStateManager.translated(vec.x, vec.y, vec.z); + GlStateManager.rotated(vec2.x * 180, vec2.z, vec2.y, 0); + + Minecraft.getInstance().getItemRenderer().renderItem(stack, TransformType.GROUND); + GlStateManager.popMatrix(); + } + GlStateManager.translated(0, 1 / 64f, 0); + } + GlStateManager.popMatrix(); + + } + +} diff --git a/src/main/java/com/simibubi/create/modules/contraptions/receivers/ConfigureMixerPacket.java b/src/main/java/com/simibubi/create/modules/contraptions/receivers/ConfigureMixerPacket.java new file mode 100644 index 000000000..65e017442 --- /dev/null +++ b/src/main/java/com/simibubi/create/modules/contraptions/receivers/ConfigureMixerPacket.java @@ -0,0 +1,39 @@ +package com.simibubi.create.modules.contraptions.receivers; + +import com.simibubi.create.foundation.packet.TileEntityConfigurationPacket; + +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.math.BlockPos; + +public class ConfigureMixerPacket extends TileEntityConfigurationPacket { + + private int value; + + public ConfigureMixerPacket(BlockPos pos, int value) { + super(pos); + this.value = value; + } + + public ConfigureMixerPacket(PacketBuffer buffer) { + super(buffer); + } + + @Override + protected void writeSettings(PacketBuffer buffer) { + buffer.writeInt(value); + } + + @Override + protected void readSettings(PacketBuffer buffer) { + value = buffer.readInt(); + } + + @Override + protected void applySettings(MechanicalMixerTileEntity te) { + te.minIngredients = value; + te.markDirty(); + te.sendData(); + te.checkBasin = true; + } + +} diff --git a/src/main/java/com/simibubi/create/modules/contraptions/receivers/MechanicalMixerBlock.java b/src/main/java/com/simibubi/create/modules/contraptions/receivers/MechanicalMixerBlock.java new file mode 100644 index 000000000..62837bb05 --- /dev/null +++ b/src/main/java/com/simibubi/create/modules/contraptions/receivers/MechanicalMixerBlock.java @@ -0,0 +1,136 @@ +package com.simibubi.create.modules.contraptions.receivers; + +import com.simibubi.create.AllBlocks; +import com.simibubi.create.foundation.block.IBlockWithScrollableValue; +import com.simibubi.create.foundation.block.IWithTileEntity; +import com.simibubi.create.foundation.utility.Lang; +import com.simibubi.create.modules.contraptions.base.KineticBlock; + +import net.minecraft.block.BlockState; +import net.minecraft.block.Blocks; +import net.minecraft.item.BlockItem; +import net.minecraft.item.BlockItemUseContext; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ActionResultType; +import net.minecraft.util.BlockRenderLayer; +import net.minecraft.util.Direction; +import net.minecraft.util.Direction.Axis; +import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.Vec3d; +import net.minecraft.util.math.shapes.ISelectionContext; +import net.minecraft.util.math.shapes.VoxelShape; +import net.minecraft.world.IBlockReader; +import net.minecraft.world.IWorld; +import net.minecraft.world.World; + +public class MechanicalMixerBlock extends KineticBlock + implements IWithTileEntity, IBlockWithScrollableValue { + + private static final Vec3d valuePos = new Vec3d(15.8f / 16f, 6 / 16f, 5 / 16f); + + public MechanicalMixerBlock() { + super(Properties.from(Blocks.ANDESITE)); + } + + @Override + public TileEntity createTileEntity(BlockState state, IBlockReader world) { + return new MechanicalMixerTileEntity(); + } + + @Override + protected boolean hasStaticPart() { + return true; + } + + @Override + public VoxelShape getShape(BlockState state, IBlockReader worldIn, BlockPos pos, ISelectionContext context) { + return MechanicalPressBlock.SHAPE; + } + + @Override + public BlockRenderLayer getRenderLayer() { + return BlockRenderLayer.CUTOUT_MIPPED; + } + + @Override + public Axis getRotationAxis(BlockState state) { + return Axis.Y; + } + + @Override + public boolean hasShaftTowards(World world, BlockPos pos, BlockState state, Direction face) { + return false; + } + + @Override + public boolean hasCogsTowards(World world, BlockPos pos, BlockState state, Direction face) { + return face.getAxis().isHorizontal(); + } + + public static class MechanicalMixerBlockItem extends BlockItem { + + public MechanicalMixerBlockItem(Properties builder) { + super(AllBlocks.MECHANICAL_MIXER.get(), builder); + } + + @Override + public ActionResultType tryPlace(BlockItemUseContext context) { + + BlockPos placedOnPos = context.getPos().offset(context.getFace().getOpposite()); + BlockState placedOnState = context.getWorld().getBlockState(placedOnPos); + if (AllBlocks.BASIN.typeOf(placedOnState)) { + if (context.getWorld().getBlockState(placedOnPos.up(2)).getMaterial().isReplaceable()) + context = BlockItemUseContext.func_221536_a(context, placedOnPos.up(2), Direction.UP); + else + return ActionResultType.FAIL; + } + + return super.tryPlace(context); + } + + } + + @Override + public String getValueName(BlockState state, IWorld world, BlockPos pos) { + return Lang.translate("mechanical_mixer.min_ingredients"); + } + + @Override + public Vec3d getValueBoxPosition(BlockState state, IWorld world, BlockPos pos) { + return valuePos; + } + + @Override + public Direction getValueBoxDirection(BlockState state, IWorld world, BlockPos pos) { + return null; + } + + @Override + public boolean isValueOnMultipleFaces() { + return true; + } + + @Override + public boolean requiresWrench() { + return true; + } + + @Override + public boolean isValueOnFace(Direction face) { + return face.getAxis().isHorizontal(); + } + + @Override + public void onScroll(BlockState state, IWorld world, BlockPos pos, double value) { + withTileEntityDo(world, pos, te -> te.setMinIngredientsLazily((int) (te.currentValue + value))); + } + + @Override + public int getCurrentValue(BlockState state, IWorld world, BlockPos pos) { + MechanicalMixerTileEntity tileEntity = (MechanicalMixerTileEntity) world.getTileEntity(pos); + if (tileEntity == null) + return 0; + return tileEntity.currentValue; + } + +} diff --git a/src/main/java/com/simibubi/create/modules/contraptions/receivers/MechanicalMixerTileEntity.java b/src/main/java/com/simibubi/create/modules/contraptions/receivers/MechanicalMixerTileEntity.java new file mode 100644 index 000000000..fc12ff9c3 --- /dev/null +++ b/src/main/java/com/simibubi/create/modules/contraptions/receivers/MechanicalMixerTileEntity.java @@ -0,0 +1,322 @@ +package com.simibubi.create.modules.contraptions.receivers; + +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; +import java.util.stream.Collectors; + +import com.simibubi.create.AllPackets; +import com.simibubi.create.AllTileEntities; +import com.simibubi.create.foundation.utility.VecHelper; +import com.simibubi.create.modules.contraptions.base.KineticTileEntity; +import com.simibubi.create.modules.contraptions.receivers.BasinTileEntity.BasinInventory; + +import net.minecraft.inventory.IInventory; +import net.minecraft.item.BucketItem; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.item.crafting.IRecipeSerializer; +import net.minecraft.item.crafting.Ingredient; +import net.minecraft.item.crafting.ShapelessRecipe; +import net.minecraft.nbt.CompoundNBT; +import net.minecraft.particles.ItemParticleData; +import net.minecraft.particles.ParticleTypes; +import net.minecraft.tileentity.ITickableTileEntity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Direction.Axis; +import net.minecraft.util.NonNullList; +import net.minecraft.util.math.AxisAlignedBB; +import net.minecraft.util.math.MathHelper; +import net.minecraft.util.math.Vec3d; +import net.minecraftforge.common.util.LazyOptional; +import net.minecraftforge.items.CapabilityItemHandler; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.IItemHandlerModifiable; +import net.minecraftforge.items.ItemHandlerHelper; + +public class MechanicalMixerTileEntity extends KineticTileEntity implements ITickableTileEntity { + + public int runningTicks; + public int processingTicks; + public boolean running; + public boolean checkBasin; + public boolean basinRemoved; + + public int minIngredients; + public int currentValue; + public int lastModified; + + private ShapelessRecipe lastRecipe; + private LazyOptional basinInv = LazyOptional.empty(); + private List inputs; + + public MechanicalMixerTileEntity() { + super(AllTileEntities.MECHANICAL_MIXER.type); + checkBasin = true; + minIngredients = currentValue = 1; + lastModified = -1; + processingTicks = -1; + } + + @Override + public void onSpeedChanged() { + super.onSpeedChanged(); + checkBasin = true; + } + + public float getRenderedHeadOffset(float partialTicks) { + int localTick = 0; + if (running) { + if (runningTicks < 20) { + localTick = runningTicks; + float num = (localTick + partialTicks) / 20f; + num = ((2 - MathHelper.cos((float) (num * Math.PI))) / 2); + return num - .5f; + } + if (runningTicks <= 20) { + return 1; + } + if (runningTicks > 20) { + localTick = 40 - runningTicks; + float num = (localTick - partialTicks) / 20f; + num = ((2 - MathHelper.cos((float) (num * Math.PI))) / 2); + return num - .5f; + } + } + return 0; + } + + public float getRenderedHeadRotationSpeed(float partialTicks) { + if (running) { + if (runningTicks < 15) { + return speed; + } + if (runningTicks <= 20) { + return speed * 2; + } + if (runningTicks > 20) { + return speed; + } + } + return speed / 2; + } + + @Override + public AxisAlignedBB getRenderBoundingBox() { + return new AxisAlignedBB(pos).expand(0, -1.5, 0); + } + + @Override + public void read(CompoundNBT compound) { + running = compound.getBoolean("Running"); + runningTicks = compound.getInt("Ticks"); + currentValue = minIngredients = compound.getInt("MinIngredients"); + super.read(compound); + } + + @Override + public CompoundNBT write(CompoundNBT compound) { + compound.putBoolean("Running", running); + compound.putInt("Ticks", runningTicks); + compound.putInt("MinIngredients", minIngredients); + return super.write(compound); + } + + public void setMinIngredientsLazily(int minIngredients) { + this.currentValue = MathHelper.clamp(minIngredients, 1, 9); + if (currentValue == this.minIngredients) + return; + this.lastModified = 0; + } + + @Override + public void tick() { + + if (world.isRemote && lastModified != -1) { + if (lastModified++ > 10) { + lastModified = -1; + AllPackets.channel.sendToServer(new ConfigureMixerPacket(pos, currentValue)); + } + } + + if (runningTicks == 40) { + running = false; + runningTicks = 0; + return; + } + + if (basinRemoved) { + basinRemoved = false; + if (running) { + runningTicks = 40; + return; + } + } + + if (running) { + if (world.isRemote && runningTicks == 20) + renderParticles(); + + if (!world.isRemote && runningTicks == 20) { + if (processingTicks < 0) { + processingTicks = (MathHelper.log2((int) (8000 / Math.abs(speed)))) * 15 + 1; + return; + } + processingTicks--; + if (processingTicks == 0) { + runningTicks++; + processingTicks = -1; + applyRecipe(); + sendData(); + } + } + + if (runningTicks != 20) + runningTicks++; + + return; + } + + if (Math.abs(speed) < 32) + return; + if (!checkBasin) + return; + checkBasin = false; + TileEntity basinTE = world.getTileEntity(pos.down(2)); + if (basinTE == null || !(basinTE instanceof BasinTileEntity)) + return; + if (!basinInv.isPresent()) + basinInv = basinTE.getCapability(CapabilityItemHandler.ITEM_HANDLER_CAPABILITY); + if (!basinInv.isPresent()) + return; + + if (world.isRemote) + return; + + gatherInputs(); + if (matchRecipe(lastRecipe)) { + running = true; + runningTicks = 0; + sendData(); + return; + } + + List> shapelessRecipe = world.getRecipeManager().getRecipes().parallelStream() + .filter(recipe -> recipe.getSerializer() == IRecipeSerializer.CRAFTING_SHAPELESS) + .filter(this::matchRecipe).sorted((r1, r2) -> r1.getIngredients().size() - r2.getIngredients().size()) + .collect(Collectors.toList()); + if (shapelessRecipe.isEmpty()) + return; + + running = true; + runningTicks = 0; + lastRecipe = (ShapelessRecipe) shapelessRecipe.get(0); + sendData(); + } + + public void renderParticles() { + IItemHandler itemHandler = basinInv.orElse(null); + if (itemHandler != null) { + BasinInventory inv = (BasinInventory) itemHandler; + + for (int slot = 0; slot < inv.getInputHandler().getSlots(); slot++) { + ItemStack stackInSlot = itemHandler.getStackInSlot(slot); + if (stackInSlot.isEmpty()) + continue; + + ItemParticleData data = new ItemParticleData(ParticleTypes.ITEM, stackInSlot); + float angle = world.rand.nextFloat() * 360; + Vec3d offset = new Vec3d(0, 0, 0.25f); + offset = VecHelper.rotate(offset, angle, Axis.Y); + Vec3d target = VecHelper.rotate(offset, speed > 0 ? 25 : -25, Axis.Y).add(0, .25f, 0); + + Vec3d center = offset.add(VecHelper.getCenterOf(pos)); + target = VecHelper.offsetRandomly(target.subtract(offset), world.rand, 1 / 128f); + world.addParticle(data, center.x, center.y - 2, center.z, target.x, target.y, target.z); + } + } + } + + public void gatherInputs() { + BasinInventory inv = (BasinInventory) basinInv.orElse(null); + inputs = new ArrayList<>(); + IItemHandlerModifiable inputHandler = inv.getInputHandler(); + for (int slot = 0; slot < inputHandler.getSlots(); ++slot) { + ItemStack itemstack = inputHandler.extractItem(slot, inputHandler.getSlotLimit(slot), true); + if (!itemstack.isEmpty()) { + inputs.add(itemstack); + } + } + } + + public void applyRecipe() { + if (lastRecipe == null) + return; + if (!basinInv.isPresent()) + return; + + BasinInventory inv = (BasinInventory) basinInv.orElse(null); + if (inv == null) + return; + + IItemHandlerModifiable inputs = inv.getInputHandler(); + IItemHandlerModifiable outputs = inv.getOutputHandler(); + int buckets = 0; + Ingredients: for (Ingredient ingredient : lastRecipe.getIngredients()) { + for (int slot = 0; slot < inputs.getSlots(); slot++) { + if (!ingredient.test(inputs.extractItem(slot, 1, true))) + continue; + ItemStack extracted = inputs.extractItem(slot, 1, false); + if (extracted.getItem() instanceof BucketItem) + buckets++; + continue Ingredients; + } + // something wasn't found + return; + } + + ItemHandlerHelper.insertItemStacked(outputs, lastRecipe.getRecipeOutput().copy(), false); + if (buckets > 0) + ItemHandlerHelper.insertItemStacked(outputs, new ItemStack(Items.BUCKET, buckets), false); + + // Continue mixing + gatherInputs(); + if (matchRecipe(lastRecipe)) { + runningTicks = 20; + sendData(); + } + } + + public boolean matchRecipe(IRecipe recipe) { + if (!(recipe instanceof ShapelessRecipe)) + return false; + if (recipe.getIngredients().size() < minIngredients) + return false; + + ShapelessRecipe shapelessRecipe = (ShapelessRecipe) recipe; + NonNullList ingredients = shapelessRecipe.getIngredients(); + if (!ingredients.stream().allMatch(Ingredient::isSimple)) + return false; + + List remaining = new ArrayList<>(); + inputs.forEach(stack -> remaining.add(stack.copy())); + + // sort by leniency + List sortedIngredients = new LinkedList<>(ingredients); + sortedIngredients.sort((i1, i2) -> i1.getMatchingStacks().length - i2.getMatchingStacks().length); + Ingredients: for (Ingredient ingredient : sortedIngredients) { + for (ItemStack stack : remaining) { + if (stack.isEmpty()) + continue; + if (ingredient.test(stack)) { + stack.shrink(1); + continue Ingredients; + } + } + return false; + } + return true; + } + +} diff --git a/src/main/java/com/simibubi/create/modules/contraptions/receivers/MechanicalMixerTileEntityRenderer.java b/src/main/java/com/simibubi/create/modules/contraptions/receivers/MechanicalMixerTileEntityRenderer.java new file mode 100644 index 000000000..50298f176 --- /dev/null +++ b/src/main/java/com/simibubi/create/modules/contraptions/receivers/MechanicalMixerTileEntityRenderer.java @@ -0,0 +1,45 @@ +package com.simibubi.create.modules.contraptions.receivers; + +import com.simibubi.create.AllBlocks; +import com.simibubi.create.foundation.utility.AnimationTickHolder; +import com.simibubi.create.modules.contraptions.base.KineticTileEntity; +import com.simibubi.create.modules.contraptions.base.KineticTileEntityRenderer; +import com.simibubi.create.modules.contraptions.receivers.MechanicalPressTileEntityRenderer.HeadTranslator; + +import net.minecraft.block.BlockState; +import net.minecraft.client.renderer.BufferBuilder; +import net.minecraft.state.properties.BlockStateProperties; +import net.minecraft.util.Direction.Axis; +import net.minecraft.util.math.BlockPos; + +public class MechanicalMixerTileEntityRenderer extends KineticTileEntityRenderer { + + @Override + public void renderTileEntityFast(KineticTileEntity te, double x, double y, double z, float partialTicks, + int destroyStage, BufferBuilder buffer) { + super.renderTileEntityFast(te, x, y, z, partialTicks, destroyStage, buffer); + + final BlockState poleState = AllBlocks.MECHANICAL_MIXER_POLE.get().getDefaultState(); + final BlockState headState = AllBlocks.MECHANICAL_MIXER_HEAD.get().getDefaultState(); + cacheIfMissing(poleState, HeadTranslator::new); + cacheIfMissing(headState, HeadTranslator::new); + final BlockPos pos = te.getPos(); + + int packedLightmapCoords = poleState.getPackedLightmapCoords(getWorld(), pos); + float speed = ((MechanicalMixerTileEntity) te).getRenderedHeadRotationSpeed(partialTicks); + float renderedHeadOffset = ((MechanicalMixerTileEntity) te).getRenderedHeadOffset(partialTicks) + 7 / 16f; + float time = AnimationTickHolder.getRenderTick(); + float angle = (float) (((time * speed * 2) % 360) / 180 * (float) Math.PI); + + buffer.putBulkData(((HeadTranslator) cachedBuffers.get(poleState)).getTransformed((float) x, (float) y, + (float) z, renderedHeadOffset, packedLightmapCoords)); + buffer.putBulkData(((HeadTranslator) cachedBuffers.get(headState)).getTransformedRotated((float) x, (float) y, + (float) z, renderedHeadOffset, angle, packedLightmapCoords)); + } + + @Override + protected BlockState getRenderedBlockState(KineticTileEntity te) { + return AllBlocks.SHAFTLESS_COGWHEEL.get().getDefaultState().with(BlockStateProperties.AXIS, Axis.Y); + } + +} diff --git a/src/main/java/com/simibubi/create/modules/contraptions/receivers/MechanicalPressTileEntityRenderer.java b/src/main/java/com/simibubi/create/modules/contraptions/receivers/MechanicalPressTileEntityRenderer.java index 2104fd28d..6a18e03fc 100644 --- a/src/main/java/com/simibubi/create/modules/contraptions/receivers/MechanicalPressTileEntityRenderer.java +++ b/src/main/java/com/simibubi/create/modules/contraptions/receivers/MechanicalPressTileEntityRenderer.java @@ -10,11 +10,13 @@ import com.simibubi.create.modules.contraptions.base.KineticTileEntityRenderer; import net.minecraft.block.BlockState; import net.minecraft.client.renderer.BufferBuilder; import net.minecraft.state.properties.BlockStateProperties; +import net.minecraft.util.Direction.Axis; import net.minecraft.util.math.BlockPos; +import net.minecraft.util.math.MathHelper; public class MechanicalPressTileEntityRenderer extends KineticTileEntityRenderer { - protected class HeadTranslator extends BufferManipulator { + public static class HeadTranslator extends BufferManipulator { public HeadTranslator(ByteBuffer original) { super(original); @@ -32,6 +34,30 @@ public class MechanicalPressTileEntityRenderer extends KineticTileEntityRenderer return mutable; } + + public ByteBuffer getTransformedRotated(float xIn, float yIn, float zIn, float pushDistance, float angle, + int packedLightCoords) { + original.rewind(); + mutable.rewind(); + float cos = MathHelper.cos(angle); + float sin = MathHelper.sin(angle); + + for (int vertex = 0; vertex < vertexCount(original); vertex++) { + float x = getX(original, vertex) - .5f; + float y = getY(original, vertex) + yIn - pushDistance; + float z = getZ(original, vertex) - .5f; + float x2 = x; + + x = rotateX(x, y, z, sin, cos, Axis.Y) + .5f + xIn; + z = rotateZ(x2, y, z, sin, cos, Axis.Y) + .5f + zIn; + + putPos(mutable, vertex, x, y, z); + putLight(mutable, vertex, packedLightCoords); + } + + return mutable; + } + } @Override diff --git a/src/main/java/com/simibubi/create/modules/contraptions/receivers/TurntableBlock.java b/src/main/java/com/simibubi/create/modules/contraptions/receivers/TurntableBlock.java index 7412ecf8b..4f4bdfeff 100644 --- a/src/main/java/com/simibubi/create/modules/contraptions/receivers/TurntableBlock.java +++ b/src/main/java/com/simibubi/create/modules/contraptions/receivers/TurntableBlock.java @@ -65,7 +65,7 @@ public class TurntableBlock extends KineticBlock { if (!world.isRemote && (e instanceof PlayerEntity)) return; - if (offset.length() > 1 / 16f) { + if (offset.length() > 1 / 4f) { offset = VecHelper.rotate(offset, speed / 1f, Axis.Y); Vec3d movement = origin.add(offset).subtract(e.getPositionVec()); e.setMotion(e.getMotion().add(movement)); diff --git a/src/main/java/com/simibubi/create/modules/contraptions/receivers/constructs/AbstractChassisBlock.java b/src/main/java/com/simibubi/create/modules/contraptions/receivers/constructs/AbstractChassisBlock.java index 2482b51e1..2acfc4a10 100644 --- a/src/main/java/com/simibubi/create/modules/contraptions/receivers/constructs/AbstractChassisBlock.java +++ b/src/main/java/com/simibubi/create/modules/contraptions/receivers/constructs/AbstractChassisBlock.java @@ -92,6 +92,11 @@ public abstract class AbstractChassisBlock extends RotatedPillarBlock return Lang.translate("generic.range"); } + @Override + public boolean requiresWrench() { + return true; + } + @Override public Vec3d getValueBoxPosition(BlockState state, IWorld world, BlockPos pos) { return valuePos; @@ -103,7 +108,7 @@ public abstract class AbstractChassisBlock extends RotatedPillarBlock } @Override - public boolean isValueOnAllSides() { + public boolean isValueOnMultipleFaces() { return true; } diff --git a/src/main/java/com/simibubi/create/modules/contraptions/receivers/constructs/ConfigureChassisPacket.java b/src/main/java/com/simibubi/create/modules/contraptions/receivers/constructs/ConfigureChassisPacket.java index 51b88b4f9..c9425f831 100644 --- a/src/main/java/com/simibubi/create/modules/contraptions/receivers/constructs/ConfigureChassisPacket.java +++ b/src/main/java/com/simibubi/create/modules/contraptions/receivers/constructs/ConfigureChassisPacket.java @@ -31,6 +31,7 @@ public class ConfigureChassisPacket extends TileEntityConfigurationPacket itemPositions = new ArrayList<>(Direction.values().length); - + public ExtractorBlock() { super(Properties.from(Blocks.ANDESITE)); setDefaultState(getDefaultState().with(POWERED, false)); @@ -47,28 +47,28 @@ public class ExtractorBlock extends HorizontalBlock implements IBlockWithFilter builder.add(HORIZONTAL_FACING, POWERED); super.fillStateContainer(builder); } - + @Override public boolean showsCount() { return true; } - + @Override public boolean hasTileEntity(BlockState state) { return true; } - + @Override public TileEntity createTileEntity(BlockState state, IBlockReader world) { return new ExtractorTileEntity(); } - + @Override public boolean onBlockActivated(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, BlockRayTraceResult hit) { return handleActivatedFilterSlots(state, worldIn, pos, player, handIn, hit); } - + @Override public BlockState getStateForPlacement(BlockItemUseContext context) { BlockState state = getDefaultState(); @@ -86,6 +86,13 @@ public class ExtractorBlock extends HorizontalBlock implements IBlockWithFilter public void onBlockAdded(BlockState state, World worldIn, BlockPos pos, BlockState oldState, boolean isMoving) { updateObservedInventory(state, worldIn, pos); } + + @Override + public boolean isValidPosition(BlockState state, IWorldReader worldIn, BlockPos pos) { + BlockPos neighbourPos = pos.offset(state.get(HORIZONTAL_FACING)); + BlockState neighbour = worldIn.getBlockState(neighbourPos); + return !neighbour.getShape(worldIn, pos).isEmpty(); + } @Override public void onNeighborChange(BlockState state, IWorldReader world, BlockPos pos, BlockPos neighbor) { @@ -95,23 +102,31 @@ public class ExtractorBlock extends HorizontalBlock implements IBlockWithFilter return; updateObservedInventory(state, world, pos); } - + private void updateObservedInventory(BlockState state, IWorldReader world, BlockPos pos) { IExtractor extractor = (IExtractor) world.getTileEntity(pos); if (extractor == null) return; extractor.neighborChanged(); } - + private boolean isObserving(BlockState state, BlockPos pos, BlockPos observing) { return observing.equals(pos.offset(state.get(HORIZONTAL_FACING))); } - + @Override public void neighborChanged(BlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos, boolean isMoving) { if (worldIn.isRemote) return; + + Direction blockFacing = state.get(HORIZONTAL_FACING); + if (fromPos.equals(pos.offset(blockFacing))) { + if (!isValidPosition(state, worldIn, pos)) { + worldIn.destroyBlock(pos, true); + return; + } + } boolean previouslyPowered = state.get(POWERED); if (previouslyPowered != worldIn.isBlockPowered(pos)) { @@ -159,7 +174,7 @@ public class ExtractorBlock extends HorizontalBlock implements IBlockWithFilter itemPositions.add(position); } } - + @Override public float getItemHitboxScale() { return 1.76f / 16f; diff --git a/src/main/java/com/simibubi/create/modules/schematics/block/SchematicannonScreen.java b/src/main/java/com/simibubi/create/modules/schematics/block/SchematicannonScreen.java index 0c4329997..ea684f4d0 100644 --- a/src/main/java/com/simibubi/create/modules/schematics/block/SchematicannonScreen.java +++ b/src/main/java/com/simibubi/create/modules/schematics/block/SchematicannonScreen.java @@ -1,6 +1,5 @@ package com.simibubi.create.modules.schematics.block; -import static com.simibubi.create.ScreenResources.FLEXCRATE; import static net.minecraft.util.text.TextFormatting.GRAY; import java.util.ArrayList; diff --git a/src/main/resources/assets/create/blockstates/basin.json b/src/main/resources/assets/create/blockstates/basin.json new file mode 100644 index 000000000..e4e1d20f2 --- /dev/null +++ b/src/main/resources/assets/create/blockstates/basin.json @@ -0,0 +1,5 @@ +{ + "variants": { + "": { "model": "create:block/basin" } + } +} diff --git a/src/main/resources/assets/create/blockstates/mechanical_mixer.json b/src/main/resources/assets/create/blockstates/mechanical_mixer.json new file mode 100644 index 000000000..fc094d2d9 --- /dev/null +++ b/src/main/resources/assets/create/blockstates/mechanical_mixer.json @@ -0,0 +1,5 @@ +{ + "variants": { + "": { "model": "create:block/mixer_base" } + } +} diff --git a/src/main/resources/assets/create/blockstates/mechanical_mixer_head.json b/src/main/resources/assets/create/blockstates/mechanical_mixer_head.json new file mode 100644 index 000000000..c4d9398e3 --- /dev/null +++ b/src/main/resources/assets/create/blockstates/mechanical_mixer_head.json @@ -0,0 +1,5 @@ +{ + "variants": { + "": { "model": "create:block/mixer_head" } + } +} diff --git a/src/main/resources/assets/create/blockstates/mechanical_mixer_pole.json b/src/main/resources/assets/create/blockstates/mechanical_mixer_pole.json new file mode 100644 index 000000000..808f47bf9 --- /dev/null +++ b/src/main/resources/assets/create/blockstates/mechanical_mixer_pole.json @@ -0,0 +1,5 @@ +{ + "variants": { + "": { "model": "create:block/mixer_pole" } + } +} diff --git a/src/main/resources/assets/create/blockstates/shaftless_cogwheel.json b/src/main/resources/assets/create/blockstates/shaftless_cogwheel.json new file mode 100644 index 000000000..676bb85d5 --- /dev/null +++ b/src/main/resources/assets/create/blockstates/shaftless_cogwheel.json @@ -0,0 +1,13 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "create:block/cogwheel_shaftless" + }, + "variants": { + "axis" : { + "x": { "x": 90, "y": 90 }, + "y": {}, + "z": { "x": 90 } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/create/lang/en_us.json b/src/main/resources/assets/create/lang/en_us.json index 96846b791..c2e8efe4d 100644 --- a/src/main/resources/assets/create/lang/en_us.json +++ b/src/main/resources/assets/create/lang/en_us.json @@ -23,6 +23,7 @@ "item.create.propeller": "Propeller", "item.create.flour": "Wheat Flour", "item.create.dough": "Dough", + "item.create.wrench": "Wrench", "item.create.blazing_pickaxe": "Blazing Pickaxe", "item.create.blazing_shovel": "Blazing Shovel", @@ -56,6 +57,8 @@ "block.create.water_wheel": "Water Wheel", "block.create.belt_support": "Belt Support", "block.create.mechanical_press": "Mechanical Press", + "block.create.mechanical_mixer": "Mechanical Mixer", + "block.create.basin": "Basin", "block.create.sticky_mechanical_piston": "Sticky Mechanical Piston", "block.create.mechanical_piston": "Mechanical Piston", @@ -345,6 +348,8 @@ "create.tooltip.holdKeyOrKey": "Hold [%1$s] or [%2$s]", "create.tooltip.keyShift": "Shift", "create.tooltip.keyCtrl": "Ctrl", + + "create.mechanical_mixer.min_ingredients": "Min. Ingredients", "_comment": "-------------------------] ITEM DESCRIPTIONS [------------------------------------------------", @@ -473,8 +478,8 @@ "block.create.encased_fan.tooltip": "ENCASED FAN", "block.create.encased_fan.tooltip.summary": "Converts _Rotational_ _Force_ to _Air_ _Currents_ and back. Has a variety of uses.", - "block.create.encased_fan.tooltip.condition1": "When above Fire", - "block.create.encased_fan.tooltip.behaviour1": "Provides _Rotational_ _Force_ (has to be vertical)", + "block.create.encased_fan.tooltip.condition1": "When Powered by Redstone", + "block.create.encased_fan.tooltip.behaviour1": "Provides _Rotational_ _Force_ from any _heat_ _sources_ immediately below itself (fan has to be vertical)", "block.create.encased_fan.tooltip.condition2": "When Rotated", "block.create.encased_fan.tooltip.behaviour2": "_Pushes_ Entities on one side, _Pulls_ on the other. Force and Speed depend on incoming Rotations.", "block.create.encased_fan.tooltip.condition3": "When air flows through special blocks", diff --git a/src/main/resources/assets/create/models/block/basin.json b/src/main/resources/assets/create/models/block/basin.json new file mode 100644 index 000000000..ebcb1694a --- /dev/null +++ b/src/main/resources/assets/create/models/block/basin.json @@ -0,0 +1,169 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/cube", + "ambientocclusion": false, + "textures": { + "12": "create:block/basin", + "particle": "create:block/basin" + }, + "elements": [ + { + "name": "Side1", + "from": [0, 5, 0], + "to": [2, 13, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 24, 8]}, + "faces": { + "north": {"uv": [7, 0, 8, 4], "texture": "#12"}, + "east": {"uv": [0, 0, 8, 4.5], "texture": "#12"}, + "south": {"uv": [0, 0, 1, 4], "texture": "#12"}, + "west": {"uv": [0, 0, 8, 4], "texture": "#12"}, + "up": {"uv": [8, 0, 9, 8], "texture": "#12"}, + "down": {"uv": [8, 0, 9, 8], "texture": "#12"} + } + }, + { + "name": "Leg1", + "from": [0, 0, 0], + "to": [2, 5, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 24, 8]}, + "faces": { + "north": {"uv": [7, 4, 8, 6.5], "texture": "#12"}, + "east": {"uv": [7, 4, 8, 6.5], "texture": "#12"}, + "south": {"uv": [0, 4, 1, 6.5], "texture": "#12"}, + "west": {"uv": [0, 4, 1, 6.5], "texture": "#12"}, + "down": {"uv": [7, 5.5, 8, 6.5], "texture": "#12"} + } + }, + { + "name": "Leg2", + "from": [0, 0, 14], + "to": [2, 5, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 24, 22]}, + "faces": { + "north": {"uv": [7, 4, 8, 6.5], "texture": "#12"}, + "east": {"uv": [0, 4, 1, 6.5], "texture": "#12"}, + "south": {"uv": [0, 4, 1, 6.5], "texture": "#12"}, + "west": {"uv": [7, 4.5, 8, 6.5], "texture": "#12"}, + "down": {"uv": [1, 10, 2, 11], "texture": "#12"} + } + }, + { + "name": "Leg3", + "from": [14, 0, 0], + "to": [16, 5, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 24, 8]}, + "faces": { + "north": {"uv": [0, 4, 1, 6.5], "texture": "#12"}, + "east": {"uv": [7, 4, 8, 6.5], "texture": "#12"}, + "south": {"uv": [7, 4, 8, 6.5], "texture": "#12"}, + "west": {"uv": [0, 4, 1, 6.5], "texture": "#12"}, + "down": {"uv": [0, 5.5, 1, 6.5], "texture": "#12"} + } + }, + { + "name": "Leg4", + "from": [14, 0, 14], + "to": [16, 5, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 24, 22]}, + "faces": { + "north": {"uv": [0, 4, 1, 6.5], "texture": "#12"}, + "east": {"uv": [0, 4, 1, 6.5], "texture": "#12"}, + "south": {"uv": [7, 4, 8, 6.5], "texture": "#12"}, + "west": {"uv": [7, 4, 8, 6.5], "texture": "#12"}, + "down": {"uv": [1, 11, 2, 12], "texture": "#12"} + } + }, + { + "name": "Bottom1", + "from": [2, 1, 2], + "to": [4, 6, 14], + "rotation": {"angle": 22.5, "axis": "z", "origin": [2, 1, 8]}, + "faces": { + "east": {"uv": [1, 4.5, 7, 7], "texture": "#12"}, + "west": {"uv": [1, 4.5, 7, 7], "texture": "#12"} + } + }, + { + "name": "Bottom2", + "from": [2, 1, 12], + "to": [14, 6, 14], + "rotation": {"angle": 22.5, "axis": "x", "origin": [4, 1, 14]}, + "faces": { + "north": {"uv": [1, 4.5, 7, 7], "texture": "#12"}, + "south": {"uv": [1, 4.5, 7, 7], "texture": "#12"} + } + }, + { + "name": "Bottom4", + "from": [2, 1, 2], + "to": [14, 6, 4], + "rotation": {"angle": -22.5, "axis": "x", "origin": [4, 1, 2]}, + "faces": { + "north": {"uv": [1, 4.5, 7, 7], "texture": "#12"}, + "south": {"uv": [1, 4.5, 7, 7], "texture": "#12"} + } + }, + { + "name": "Bottom3", + "from": [12, 1, 2], + "to": [14, 6, 14], + "rotation": {"angle": -22.5, "axis": "z", "origin": [14, 1, 8]}, + "faces": { + "east": {"uv": [1, 4.5, 7, 7], "texture": "#12"}, + "west": {"uv": [1, 4.5, 7, 7], "texture": "#12"} + } + }, + { + "name": "BasinBottom", + "from": [2, 0, 2], + "to": [14, 2, 14], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 25, 8]}, + "faces": { + "north": {"uv": [1, 6.5, 7, 7.5], "texture": "#12"}, + "east": {"uv": [1, 6.5, 7, 7.5], "texture": "#12"}, + "south": {"uv": [1, 6.5, 7, 7.5], "texture": "#12"}, + "west": {"uv": [1, 6.5, 7, 7.5], "texture": "#12"}, + "up": {"uv": [0, 10, 6, 16], "texture": "#12"}, + "down": {"uv": [0, 10, 6, 16], "rotation": 90, "texture": "#12"} + } + }, + { + "name": "Side4", + "from": [2, 5, 0], + "to": [14, 13, 2], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 24, 8]}, + "faces": { + "north": {"uv": [1, 0, 7, 4], "texture": "#12"}, + "south": {"uv": [0, 0, 8, 4.5], "texture": "#12"}, + "up": {"uv": [9, 0, 15, 1], "texture": "#12"}, + "down": {"uv": [9, 7, 15, 8], "texture": "#12"} + } + }, + { + "name": "Side2", + "from": [2, 5, 14], + "to": [14, 13, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 24, 8]}, + "faces": { + "north": {"uv": [1, 0, 7, 4.5], "texture": "#12"}, + "south": {"uv": [1, 0, 7, 4], "texture": "#12"}, + "up": {"uv": [9, 7, 15, 8], "texture": "#12"}, + "down": {"uv": [9, 0, 15, 1], "texture": "#12"} + } + }, + { + "name": "Side3", + "from": [14, 5, 0], + "to": [16, 13, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 40, 8]}, + "faces": { + "north": {"uv": [0, 0, 1, 4], "texture": "#12"}, + "east": {"uv": [0, 0, 8, 4], "texture": "#12"}, + "south": {"uv": [7, 0, 8, 4], "texture": "#12"}, + "west": {"uv": [0, 0, 8, 4.5], "texture": "#12"}, + "up": {"uv": [15, 0, 16, 8], "texture": "#12"}, + "down": {"uv": [15, 0, 16, 8], "texture": "#12"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/cogwheel_shaftless.json b/src/main/resources/assets/create/models/block/cogwheel_shaftless.json new file mode 100644 index 000000000..3568cf503 --- /dev/null +++ b/src/main/resources/assets/create/models/block/cogwheel_shaftless.json @@ -0,0 +1,91 @@ +{ + "__comment": "Model generated using MrCrayfish's Model Creator (http://mrcrayfish.com/modelcreator/)", + "parent": "block/cube", + "textures": { + "particle": "block/stripped_spruce_log", + "1": "block/stripped_spruce_log", + "2": "block/stripped_spruce_log_top" + }, + "elements": [ + { + "name": "Gear", + "from": [ -1.0, 6.5, 6.5 ], + "to": [ 17.0, 9.5, 9.5 ], + "faces": { + "north": { "texture": "#1", "uv": [ 6.0, 0.0, 9.0, 16.0 ], "rotation": 90 }, + "east": { "texture": "#1", "uv": [ 1.0, 3.0, 4.0, 6.0 ] }, + "south": { "texture": "#1", "uv": [ 0.0, 0.0, 16.0, 3.0 ] }, + "west": { "texture": "#1", "uv": [ 5.0, 10.0, 8.0, 13.0 ] }, + "up": { "texture": "#1", "uv": [ 0.0, 0.0, 16.0, 3.0 ] }, + "down": { "texture": "#1", "uv": [ 0.0, 0.0, 16.0, 3.0 ] } + } + }, + { + "name": "Gear2", + "from": [ -1.0, 6.5, 6.5 ], + "to": [ 17.0, 9.5, 9.5 ], + "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": 45.0 }, + "faces": { + "north": { "texture": "#1", "uv": [ 0.0, 0.0, 16.0, 3.0 ] }, + "east": { "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, + "south": { "texture": "#1", "uv": [ 0.0, 0.0, 16.0, 3.0 ] }, + "west": { "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, + "up": { "texture": "#1", "uv": [ 0.0, 0.0, 16.0, 3.0 ] }, + "down": { "texture": "#1", "uv": [ 0.0, 0.0, 16.0, 3.0 ] } + } + }, + { + "name": "Gear3", + "from": [ -1.0, 6.5, 6.5 ], + "to": [ 17.0, 9.5, 9.5 ], + "rotation": { "origin": [ 8.0, 8.0, 8.0 ], "axis": "y", "angle": -45.0 }, + "faces": { + "north": { "texture": "#1", "uv": [ 0.0, 0.0, 16.0, 3.0 ] }, + "east": { "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, + "south": { "texture": "#1", "uv": [ 0.0, 0.0, 16.0, 3.0 ] }, + "west": { "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, + "up": { "texture": "#1", "uv": [ 0.0, 0.0, 16.0, 3.0 ] }, + "down": { "texture": "#1", "uv": [ 0.0, 0.0, 16.0, 3.0 ] } + } + }, + { + "name": "Gear4", + "from": [ 6.5, 6.5, -1.0 ], + "to": [ 9.5, 9.5, 17.0 ], + "faces": { + "north": { "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, + "east": { "texture": "#1", "uv": [ 0.0, 0.0, 16.0, 3.0 ] }, + "south": { "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 3.0 ] }, + "west": { "texture": "#1", "uv": [ 0.0, 0.0, 16.0, 3.0 ] }, + "up": { "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 16.0 ] }, + "down": { "texture": "#1", "uv": [ 0.0, 0.0, 3.0, 16.0 ] } + } + }, + { + "name": "GearCaseInner", + "from": [ 2.0, 7.0, 2.0 ], + "to": [ 14.0, 9.0, 14.0 ], + "faces": { + "north": { "texture": "#1", "uv": [ 0.0, 0.0, 12.0, 2.0 ] }, + "east": { "texture": "#1", "uv": [ 0.0, 0.0, 12.0, 2.0 ] }, + "south": { "texture": "#1", "uv": [ 0.0, 0.0, 12.0, 2.0 ] }, + "west": { "texture": "#1", "uv": [ 0.0, 0.0, 12.0, 2.0 ] }, + "up": { "texture": "#2", "uv": [ 2.0, 2.0, 14.0, 14.0 ] }, + "down": { "texture": "#2", "uv": [ 2.0, 2.0, 14.0, 14.0 ] } + } + }, + { + "name": "GearCaseOuter", + "from": [ 4.0, 6.0, 4.0 ], + "to": [ 12.0, 10.0, 12.0 ], + "faces": { + "north": { "texture": "#1", "uv": [ 0.0, 0.0, 8.0, 4.0 ] }, + "east": { "texture": "#1", "uv": [ 0.0, 0.0, 8.0, 4.0 ] }, + "south": { "texture": "#1", "uv": [ 0.0, 0.0, 8.0, 4.0 ] }, + "west": { "texture": "#1", "uv": [ 0.0, 0.0, 8.0, 4.0 ] }, + "up": { "texture": "#2", "uv": [ 4.0, 4.0, 12.0, 12.0 ] }, + "down": { "texture": "#2", "uv": [ 4.0, 4.0, 12.0, 12.0 ] } + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/mixer_base.json b/src/main/resources/assets/create/models/block/mixer_base.json new file mode 100644 index 000000000..fe9f46be1 --- /dev/null +++ b/src/main/resources/assets/create/models/block/mixer_base.json @@ -0,0 +1,76 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/cube", + "ambientocclusion": false, + "textures": { + "1": "block/stripped_spruce_log", + "2": "block/spruce_log_top", + "4": "create:block/mixer_base_side", + "11": "create:block/mechanical_press_top", + "particle": "block/stripped_spruce_log" + }, + "elements": [ + { + "name": "Top", + "from": [0, 10, 0], + "to": [16, 16, 16], + "faces": { + "north": {"uv": [0, 0, 16, 6], "texture": "#4"}, + "east": {"uv": [0, 0, 16, 6], "texture": "#4"}, + "south": {"uv": [0, 0, 16, 6], "texture": "#4"}, + "west": {"uv": [0, 0, 16, 6], "texture": "#4"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#11"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#2"} + } + }, + { + "name": "Bottom", + "from": [0, 2, 0], + "to": [16, 6, 16], + "faces": { + "north": {"uv": [0, 10, 16, 14], "texture": "#4"}, + "east": {"uv": [0, 10, 16, 14], "texture": "#4"}, + "south": {"uv": [0, 10, 16, 14], "texture": "#4"}, + "west": {"uv": [0, 10, 16, 14], "texture": "#4"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#2"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#11"} + } + }, + { + "name": "Side1", + "from": [0, 6, 0], + "to": [0, 10, 16], + "faces": { + "east": {"uv": [0, 6, 16, 10], "texture": "#4"}, + "west": {"uv": [0, 6, 16, 10], "texture": "#4"} + } + }, + { + "name": "Side2", + "from": [16, 6, 0], + "to": [16, 10, 16], + "faces": { + "east": {"uv": [0, 6, 16, 10], "texture": "#4"}, + "west": {"uv": [0, 6, 16, 10], "texture": "#4"} + } + }, + { + "name": "Side3", + "from": [0, 6, 16], + "to": [16, 10, 16], + "faces": { + "north": {"uv": [0, 6, 16, 10], "texture": "#4"}, + "south": {"uv": [0, 6, 16, 10], "texture": "#4"} + } + }, + { + "name": "Side4", + "from": [0, 6, 0], + "to": [16, 10, 0], + "faces": { + "north": {"uv": [0, 6, 16, 10], "texture": "#4"}, + "south": {"uv": [0, 6, 16, 10], "texture": "#4"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/mixer_head.json b/src/main/resources/assets/create/models/block/mixer_head.json new file mode 100644 index 000000000..be4452e33 --- /dev/null +++ b/src/main/resources/assets/create/models/block/mixer_head.json @@ -0,0 +1,129 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/cube", + "ambientocclusion": false, + "textures": { + "6": "create:block/mixer_head", + "mechanical_press_pole": "create:block/mechanical_press_pole" + }, + "elements": [ + { + "name": "MixerCenter", + "from": [7, -4.5, 7], + "to": [9, 7.5, 9], + "shade": false, + "rotation": {"angle": 0, "axis": "y", "origin": [8, 7, 8]}, + "faces": { + "north": {"uv": [0, 12, 12, 14], "rotation": 90, "texture": "#6"}, + "east": {"uv": [0, 12, 12, 14], "rotation": 90, "texture": "#6"}, + "south": {"uv": [0, 12, 12, 14], "rotation": 90, "texture": "#6"}, + "west": {"uv": [0, 12, 12, 14], "rotation": 90, "texture": "#6"}, + "down": {"uv": [0, 12, 2, 14], "texture": "#6"} + } + }, + { + "name": "mixerbottom1", + "from": [2.5, -4, 7], + "to": [13.5, -2, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 7, 8]}, + "faces": { + "north": {"uv": [0, 14, 11, 16], "texture": "#6"}, + "east": {"uv": [2, 8, 4, 10], "texture": "#6"}, + "south": {"uv": [0, 14, 11, 16], "texture": "#6"}, + "west": {"uv": [2, 0, 4, 2], "texture": "#6"}, + "up": {"uv": [0, 12, 11, 14], "texture": "#6"}, + "down": {"uv": [0, 10, 11, 12], "texture": "#6"} + } + }, + { + "name": "mixerbottom2", + "from": [7, -4, 2.5], + "to": [9, -2, 13.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 7, 8]}, + "faces": { + "north": {"uv": [2, 8, 4, 10], "texture": "#6"}, + "east": {"uv": [0, 14, 11, 16], "texture": "#6"}, + "south": {"uv": [2, 8, 4, 10], "texture": "#6"}, + "west": {"uv": [0, 14, 11, 16], "texture": "#6"}, + "up": {"uv": [0, 12, 11, 14], "rotation": 90, "texture": "#6"}, + "down": {"uv": [0, 10, 11, 12], "rotation": 90, "texture": "#6"} + } + }, + { + "name": "mixerside4", + "from": [11.5, -2, 7], + "to": [13.5, 4, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 7, 8]}, + "faces": { + "north": {"uv": [0, 2, 2, 8], "rotation": 180, "texture": "#6"}, + "east": {"uv": [2, 2, 4, 8], "texture": "#6"}, + "south": {"uv": [0, 2, 2, 8], "texture": "#6"}, + "west": {"uv": [4, 0, 6, 6], "texture": "#6"} + } + }, + { + "name": "mixerside3", + "from": [2.5, -2, 7], + "to": [4.5, 4, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 7, 8]}, + "faces": { + "north": {"uv": [0, 2, 2, 8], "texture": "#6"}, + "east": {"uv": [4, 0, 6, 6], "texture": "#6"}, + "south": {"uv": [0, 2, 2, 8], "rotation": 180, "texture": "#6"}, + "west": {"uv": [2, 2, 4, 8], "texture": "#6"} + } + }, + { + "name": "mixerside2", + "from": [7, -2, 2.5], + "to": [9, 4, 4.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 7, 8]}, + "faces": { + "north": {"uv": [2, 2, 4, 8], "texture": "#6"}, + "east": {"uv": [0, 2, 2, 8], "texture": "#6"}, + "south": {"uv": [4, 0, 6, 6], "texture": "#6"}, + "west": {"uv": [0, 2, 2, 8], "rotation": 180, "texture": "#6"} + } + }, + { + "name": "mixerside1", + "from": [7, -2, 11.5], + "to": [9, 4, 13.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 7, 8]}, + "faces": { + "north": {"uv": [4, 0, 6, 6], "texture": "#6"}, + "east": {"uv": [0, 2, 2, 8], "rotation": 180, "texture": "#6"}, + "south": {"uv": [2, 2, 4, 8], "texture": "#6"}, + "west": {"uv": [0, 2, 2, 8], "texture": "#6"} + } + }, + { + "name": "mixertop1", + "from": [7, 4, 2.5], + "to": [9, 6, 13.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 7, 8]}, + "faces": { + "north": {"uv": [2, 0, 4, 2], "texture": "#6"}, + "east": {"uv": [0, 14, 11, 16], "rotation": 180, "texture": "#6"}, + "south": {"uv": [2, 0, 4, 2], "texture": "#6"}, + "west": {"uv": [0, 14, 11, 16], "rotation": 180, "texture": "#6"}, + "up": {"uv": [0, 10, 11, 12], "rotation": 90, "texture": "#6"}, + "down": {"uv": [0, 12, 11, 14], "rotation": 90, "texture": "#6"} + } + }, + { + "name": "mixertop2", + "from": [2.5, 4, 7], + "to": [13.5, 6, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 7, 8]}, + "faces": { + "north": {"uv": [0, 14, 11, 16], "rotation": 180, "texture": "#6"}, + "east": {"uv": [2, 0, 4, 2], "texture": "#6"}, + "south": {"uv": [0, 14, 11, 16], "rotation": 180, "texture": "#6"}, + "west": {"uv": [2, 0, 4, 2], "texture": "#6"}, + "up": {"uv": [0, 10, 11, 12], "texture": "#6"}, + "down": {"uv": [0, 12, 11, 14], "texture": "#6"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/block/mixer_pole.json b/src/main/resources/assets/create/models/block/mixer_pole.json new file mode 100644 index 000000000..5355b5b23 --- /dev/null +++ b/src/main/resources/assets/create/models/block/mixer_pole.json @@ -0,0 +1,100 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/cube", + "ambientocclusion": false, + "textures": { + "6": "create:block/mixer_head", + "mechanical_press_pole": "create:block/mechanical_press_pole" + }, + "elements": [ + { + "name": "polebase", + "from": [5, 7, 5], + "to": [11, 9, 11], + "shade": false, + "rotation": {"angle": 0, "axis": "y", "origin": [8, 9, 8]}, + "faces": { + "north": {"uv": [10, 6, 16, 8], "texture": "#6"}, + "east": {"uv": [10, 6, 16, 8], "texture": "#6"}, + "south": {"uv": [10, 6, 16, 8], "texture": "#6"}, + "west": {"uv": [10, 6, 16, 8], "texture": "#6"}, + "up": {"uv": [10, 0, 16, 6], "texture": "#6"}, + "down": {"uv": [10, 0, 16, 6], "texture": "#6"} + } + }, + { + "name": "Pole1Core", + "from": [6, 9, 6], + "to": [10, 19, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 16, 8]}, + "faces": { + "east": {"uv": [6, 6, 10, 16], "texture": "#mechanical_press_pole"}, + "west": {"uv": [6, 6, 10, 16], "texture": "#mechanical_press_pole"}, + "down": {"uv": [11, 1, 15, 5], "texture": "#mechanical_press_pole"} + } + }, + { + "name": "Pole1Side", + "from": [5, 9, 5], + "to": [11, 19, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 16, 8]}, + "faces": { + "north": {"uv": [0, 6, 6, 16], "texture": "#mechanical_press_pole"}, + "east": {"uv": [0, 6, 1, 16], "texture": "#mechanical_press_pole"}, + "south": {"uv": [0, 6, 6, 16], "texture": "#mechanical_press_pole"}, + "west": {"uv": [5, 6, 6, 16], "texture": "#mechanical_press_pole"}, + "down": {"uv": [10, 5, 16, 6], "texture": "#mechanical_press_pole"} + } + }, + { + "name": "Pole1Side", + "from": [5, 9, 10], + "to": [11, 19, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 16, 8]}, + "faces": { + "north": {"uv": [0, 6, 6, 16], "texture": "#mechanical_press_pole"}, + "east": {"uv": [0, 6, 1, 16], "texture": "#mechanical_press_pole"}, + "south": {"uv": [0, 6, 6, 16], "texture": "#mechanical_press_pole"}, + "west": {"uv": [5, 6, 6, 16], "texture": "#mechanical_press_pole"}, + "down": {"uv": [10, 0, 16, 1], "texture": "#mechanical_press_pole"} + } + }, + { + "name": "Pole2Core", + "from": [6, 19, 6], + "to": [10, 32, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 13, 8]}, + "faces": { + "east": {"uv": [6, 0, 10, 13], "texture": "#mechanical_press_pole"}, + "west": {"uv": [6, 0, 10, 13], "texture": "#mechanical_press_pole"}, + "up": {"uv": [11, 1, 15, 5], "rotation": 180, "texture": "#mechanical_press_pole"} + } + }, + { + "name": "Pole2Side", + "from": [5, 19, 10], + "to": [11, 32, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 13, 8]}, + "faces": { + "north": {"uv": [0, 0, 6, 13], "texture": "#mechanical_press_pole"}, + "east": {"uv": [0, 0, 1, 13], "texture": "#mechanical_press_pole"}, + "south": {"uv": [0, 0, 6, 13], "texture": "#mechanical_press_pole"}, + "west": {"uv": [5, 0, 6, 13], "texture": "#mechanical_press_pole"}, + "up": {"uv": [10, 0, 16, 1], "rotation": 180, "texture": "#mechanical_press_pole"} + } + }, + { + "name": "Pole2Side", + "from": [5, 19, 5], + "to": [11, 32, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 13, 8]}, + "faces": { + "north": {"uv": [0, 0, 6, 13], "texture": "#mechanical_press_pole"}, + "east": {"uv": [0, 0, 1, 13], "texture": "#mechanical_press_pole"}, + "south": {"uv": [0, 0, 6, 13], "texture": "#mechanical_press_pole"}, + "west": {"uv": [5, 0, 6, 13], "texture": "#mechanical_press_pole"}, + "up": {"uv": [10, 5, 16, 6], "rotation": 180, "texture": "#mechanical_press_pole"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/item/basin.json b/src/main/resources/assets/create/models/item/basin.json new file mode 100644 index 000000000..b86f02dfb --- /dev/null +++ b/src/main/resources/assets/create/models/item/basin.json @@ -0,0 +1,3 @@ +{ + "parent": "create:block/basin" +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/item/deforester/deforester.bbmodel b/src/main/resources/assets/create/models/item/deforester/deforester.bbmodel new file mode 100644 index 000000000..17e14a521 --- /dev/null +++ b/src/main/resources/assets/create/models/item/deforester/deforester.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"3.0","model_format":"java_block","box_uv":false},"name":"deforester","parent":"create:item/placement_handgun","ambientocclusion":true,"resolution":{"width":16,"height":16},"elements":[{"name":"handle","from":[7.5,1,7.5],"to":[8.5,12,8.5],"autouv":0,"color":4,"origin":[8,8,8],"faces":{"north":{"uv":[0,0,1,11],"texture":0},"east":{"uv":[0,0,1,11],"texture":0},"south":{"uv":[0,0,1,11],"texture":0},"west":{"uv":[0,0,1,11],"texture":0},"up":{"uv":[0,0,1,1],"texture":0},"down":{"uv":[0,0,1,1],"texture":0}},"uuid":"dfe08692-71dd-1b40-081c-6f903a71e64b"},{"name":"Cog","from":[7.5,9,6],"to":[8.5,10,10],"autouv":0,"color":0,"rotation":[0,-45,0],"origin":[8,8.5,8],"faces":{"north":{"uv":[4,6,5,7],"texture":3},"east":{"uv":[4,6,8,7],"texture":3},"south":{"uv":[4,6,5,7],"texture":3},"west":{"uv":[4,6,8,7],"texture":3},"up":{"uv":[4,6,5,10],"texture":3},"down":{"uv":[4,6,5,10],"texture":3}},"uuid":"d08449b1-27ab-44fd-7172-38fe20e03561"},{"name":"Cog","from":[7.499999999999998,9,5.9999999999999964],"to":[8.499999999999998,10,9.999999999999996],"autouv":0,"color":0,"origin":[8,8.5,8],"faces":{"north":{"uv":[5,6,6,7],"rotation":180,"texture":3},"east":{"uv":[5,6,9,7],"rotation":180,"texture":3},"south":{"uv":[5,6,6,7],"rotation":180,"texture":3},"west":{"uv":[5,6,9,7],"rotation":180,"texture":3},"up":{"uv":[5,6,6,10],"rotation":180,"texture":3},"down":{"uv":[5,6,6,10],"rotation":180,"texture":3}},"uuid":"a12551ad-a6a5-8301-76bd-bdbde45c7a25"},{"name":"Cog","from":[7.5000000000000036,9,5.9999999999999964],"to":[8.500000000000004,10,9.999999999999996],"autouv":0,"color":4,"rotation":[0,45,0],"origin":[8,8.5,8],"faces":{"north":{"uv":[5,6,6,7],"rotation":180,"texture":3},"east":{"uv":[5,6,9,7],"rotation":180,"texture":3},"south":{"uv":[5,6,6,7],"rotation":180,"texture":3},"west":{"uv":[5,6,9,7],"rotation":180,"texture":3},"up":{"uv":[5,6,6,10],"rotation":180,"texture":3},"down":{"uv":[5,6,6,10],"rotation":180,"texture":3}},"uuid":"4c1750d6-386d-a15d-f415-8e409277af44"},{"name":"Cog","from":[6,9,7.5],"to":[10,10,8.5],"autouv":0,"color":4,"origin":[8,8.5,8],"faces":{"north":{"uv":[4,6,5,10],"rotation":90,"texture":3},"east":{"uv":[4,6,5,7],"rotation":90,"texture":3},"south":{"uv":[4,6,5,10],"rotation":90,"texture":3},"west":{"uv":[4,6,5,7],"rotation":90,"texture":3},"up":{"uv":[4,6,5,10],"rotation":90,"texture":3},"down":{"uv":[4,6,5,10],"rotation":90,"texture":3}},"uuid":"22abe18c-bc59-6394-467e-011a243b43ed"},{"name":"handle","from":[7,0,7],"to":[9,1,9],"autouv":0,"color":4,"rotation":[0,-45,0],"origin":[8,8,8],"faces":{"north":{"uv":[0,0,2,1],"texture":5},"east":{"uv":[3,0,5,1],"texture":5},"south":{"uv":[2,0,4,1],"texture":5},"west":{"uv":[5,0,7,1],"texture":5},"up":{"uv":[5,9,7,11],"texture":5},"down":{"uv":[5,9,7,11],"texture":5}},"uuid":"c8c082dc-2577-15e3-6c9c-bdab707033fe"},{"name":"blade2","from":[10.5,9.700000000000003,7.75],"to":[11.5,15.700000000000003,8.25],"autouv":0,"color":1,"origin":[8,6.75,8],"faces":{"north":{"uv":[0,0,1,6],"texture":1},"east":{"uv":[0,0,1,6],"texture":1},"south":{"uv":[0,0,1,6],"texture":1},"west":{"uv":[0,0,1,6],"texture":1},"up":{"uv":[0,0,1,1],"texture":1},"down":{"uv":[0,0,1,1],"texture":1}},"uuid":"569ec4a3-caf3-17fa-f4a7-4ed4c086197a"},{"name":"body_top","from":[4.5,13.5,7.25],"to":[9.5,15,8.75],"autouv":0,"color":4,"origin":[8,8,8],"faces":{"north":{"uv":[1,9,6,10.5],"texture":5},"east":{"uv":[1,7,2.5,8.5],"texture":5},"south":{"uv":[1,8,6,9.5],"texture":5},"west":{"uv":[1,6,2.5,7.5],"texture":5},"up":{"uv":[1,8,6,9.5],"texture":5},"down":{"uv":[2,7,7,8.5],"texture":5}},"uuid":"6bfd5abe-205b-042d-c12c-f88b1eaf1650"},{"name":"connector","from":[9.5,10.5,7],"to":[10.5,15.5,9],"autouv":0,"color":4,"origin":[8.5,7,8],"faces":{"north":{"uv":[2,0,3,5],"texture":0},"east":{"uv":[2,0,4,5],"texture":0},"south":{"uv":[2,0,3,5],"texture":0},"west":{"uv":[2,0,4,5],"texture":0},"up":{"uv":[2,0,3,2],"texture":0},"down":{"uv":[2,0,3,2],"texture":0}},"uuid":"32640f79-576c-642f-fc00-b02996847dd8"},{"name":"light_inner","from":[6,12,7.75],"to":[9.5,14,8.25],"autouv":0,"color":1,"origin":[10,16.5,7.5],"faces":{"north":{"uv":[0,0,3.5,2],"texture":1},"east":{"uv":[0,0,0.5,2],"texture":1},"south":{"uv":[0,0,3.5,2],"texture":1},"west":{"uv":[0,0,0.5,2],"texture":1},"up":{"uv":[0,0,3.5,0.5],"texture":1},"down":{"uv":[0,0,3.5,0.5],"texture":1}},"uuid":"1399b287-4f31-05c0-dc79-146e02b235f8"},{"name":"body_bottom","from":[5.5,11,7.25],"to":[9.5,12.5,8.75],"autouv":0,"color":4,"origin":[8,8,8],"faces":{"north":{"uv":[4,3,8,4.5],"texture":5},"east":{"uv":[0,0,1.5,1.5],"texture":5},"south":{"uv":[4,3,8,4.5],"texture":5},"west":{"uv":[5,3,6.5,4.5],"texture":5},"up":{"uv":[5,3,10,3.5],"texture":5},"down":{"uv":[5,4,9,5.5],"texture":5}},"uuid":"3bc99a9d-a09d-e9c9-323c-6b7cf6de252e"},{"name":"handle","from":[7,8,7],"to":[9,9,9],"autouv":0,"color":4,"rotation":[0,-45,0],"origin":[8,8,8],"faces":{"north":{"uv":[0,0,2,1],"texture":5},"east":{"uv":[0,0,2,1],"texture":5},"south":{"uv":[0,0,2,1],"texture":5},"west":{"uv":[0,0,2,1],"texture":5},"up":{"uv":[3,9,5,11],"texture":5},"down":{"uv":[5,9,7,11],"texture":5}},"uuid":"4c041d57-1d40-da10-6736-96562584ed36"},{"name":"light_outer","from":[5.75,12,7.5],"to":[9.5,14,8.5],"autouv":0,"color":1,"origin":[10,16.5,7.5],"faces":{"north":{"uv":[7,0,10.75,2],"texture":2},"east":{"uv":[7,0,8,2],"texture":2},"south":{"uv":[7,0,10.75,2],"texture":2},"west":{"uv":[7,0,8,2],"texture":2},"up":{"uv":[0,0,3.75,1],"texture":null},"down":{"uv":[0,0,3.75,1],"texture":null}},"uuid":"26fe22e4-4702-0f29-e856-1c8c9c892830"},{"name":"blade3","from":[10.25,9.450000000000003,7.5],"to":[11.75,15.950000000000003,8.5],"autouv":0,"color":1,"origin":[8,6.75,8],"faces":{"north":{"uv":[0,6,1.5,12.5],"rotation":180,"texture":2},"east":{"uv":[0,6,1,12.5],"texture":2},"south":{"uv":[0,7,1.5,13.5],"texture":2},"west":{"uv":[1,6,2,12.5],"texture":2},"up":{"uv":[0,9,1.5,10],"texture":2},"down":{"uv":[0,7,1.5,8],"texture":2}},"uuid":"c405d099-03c8-ab7b-8675-92cf77c007cb"}],"outliner":[{"name":"head","uuid":"411f5c3c-c9e4-580f-8163-f2e34cc48e1d","export":true,"isOpen":true,"visibility":true,"autouv":0,"origin":[8,8,8],"children":["569ec4a3-caf3-17fa-f4a7-4ed4c086197a","c405d099-03c8-ab7b-8675-92cf77c007cb","32640f79-576c-642f-fc00-b02996847dd8"]},"6bfd5abe-205b-042d-c12c-f88b1eaf1650","1399b287-4f31-05c0-dc79-146e02b235f8","26fe22e4-4702-0f29-e856-1c8c9c892830","3bc99a9d-a09d-e9c9-323c-6b7cf6de252e","dfe08692-71dd-1b40-081c-6f903a71e64b","c8c082dc-2577-15e3-6c9c-bdab707033fe","4c041d57-1d40-da10-6736-96562584ed36",{"name":"accelerator","uuid":"f4df80af-3ad5-eaec-1a6c-c6853f92d5da","export":true,"isOpen":true,"visibility":true,"autouv":0,"origin":[8,8,8],"children":["d08449b1-27ab-44fd-7172-38fe20e03561","a12551ad-a6a5-8301-76bd-bdbde45c7a25","4c1750d6-386d-a15d-f415-8e409277af44","22abe18c-bc59-6394-467e-011a243b43ed"]}],"textures":[{"path":"C:\\Users\\simon\\Desktop\\Forge\\Create\\src\\main\\resources\\assets\\create\\textures\\block\\andesite_alloy_mesh.png","name":"andesite_alloy_mesh.png","folder":"block","namespace":"create","id":"2","particle":true,"mode":"link","saved":true,"uuid":"371924ea-729d-4bad-bc3d-284683b16141"},{"path":"D:\\simon\\Minecraft\\Minecraft Assets\\minecraft\\textures\\block\\white_concrete_powder.png","name":"white_concrete_powder.png","folder":"block","namespace":"minecraft","id":"3","particle":false,"mode":"link","saved":true,"uuid":"993fb6c6-3742-dd39-5816-80ae1df51b4d"},{"path":"D:\\simon\\Minecraft\\Minecraft Assets\\minecraft\\textures\\block\\white_stained_glass.png","name":"white_stained_glass.png","folder":"block","namespace":"minecraft","id":"4","particle":false,"mode":"link","saved":true,"uuid":"70db9f44-c287-b19c-a9f1-875c31817cef"},{"path":"D:\\simon\\Minecraft\\Minecraft Assets\\minecraft\\textures\\block\\stripped_spruce_log.png","name":"stripped_spruce_log.png","folder":"block","namespace":"minecraft","id":"5","particle":false,"mode":"link","saved":true,"uuid":"9af96ded-05a4-137d-d49d-202e926d44e4"},{"path":"D:\\simon\\Minecraft\\Minecraft Assets\\minecraft\\textures\\block\\spruce_log.png","name":"spruce_log.png","folder":"block","namespace":"minecraft","id":"6","particle":false,"mode":"link","saved":true,"uuid":"7637d73d-d7b8-9da7-ecbe-dbd3c0fcf1f5"},{"path":"C:\\Users\\simon\\Desktop\\Forge\\Create\\src\\main\\resources\\assets\\create\\textures\\block\\blaze_brass_mesh.png","name":"blaze_brass_mesh.png","folder":"block","namespace":"create","id":"7","particle":false,"mode":"link","saved":true,"uuid":"2419a306-75da-461b-a364-b47b03c32122"}]} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/item/mechanical_mixer.json b/src/main/resources/assets/create/models/item/mechanical_mixer.json new file mode 100644 index 000000000..b865a1f18 --- /dev/null +++ b/src/main/resources/assets/create/models/item/mechanical_mixer.json @@ -0,0 +1,415 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/cube", + "ambientocclusion": false, + "textures": { + "1": "block/stripped_spruce_log", + "2": "block/spruce_log_top", + "4": "create:block/mixer_base_side", + "6": "create:block/mixer_head", + "11": "create:block/mechanical_press_top", + "mechanical_press_pole": "create:block/mechanical_press_pole", + "particle": "block/stripped_spruce_log" + }, + "display": { + "gui": { + "rotation": [ 30, 225, 0 ], + "translation": [ 0, -2, 0], + "scale":[ 0.45, 0.45, 0.45 ] + }, + "fixed": { + "rotation": [ 0, 0, 0 ], + "translation": [ 0, -2.75, -0.0625], + "scale":[ 0.5, 0.5, 0.5 ] + } + }, + "elements": [ + { + "name": "MixerCenter", + "from": [7, -4.5, 7], + "to": [9, 7.5, 9], + "shade": false, + "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 7, 8]}, + "faces": { + "north": {"uv": [0, 12, 12, 14], "rotation": 90, "texture": "#6"}, + "east": {"uv": [0, 12, 12, 14], "rotation": 90, "texture": "#6"}, + "south": {"uv": [0, 12, 12, 14], "rotation": 90, "texture": "#6"}, + "west": {"uv": [0, 12, 12, 14], "rotation": 90, "texture": "#6"}, + "down": {"uv": [0, 12, 2, 14], "texture": "#6"} + } + }, + { + "name": "mixerbottom1", + "from": [2.5, -4, 7], + "to": [13.5, -2, 9], + "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 7, 8]}, + "faces": { + "north": {"uv": [0, 14, 11, 16], "texture": "#6"}, + "east": {"uv": [2, 8, 4, 10], "texture": "#6"}, + "south": {"uv": [0, 14, 11, 16], "texture": "#6"}, + "west": {"uv": [2, 0, 4, 2], "texture": "#6"}, + "up": {"uv": [0, 12, 11, 14], "texture": "#6"}, + "down": {"uv": [0, 10, 11, 12], "texture": "#6"} + } + }, + { + "name": "mixerbottom2", + "from": [7, -4, 2.5], + "to": [9, -2, 13.5], + "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 7, 8]}, + "faces": { + "north": {"uv": [2, 8, 4, 10], "texture": "#6"}, + "east": {"uv": [0, 14, 11, 16], "texture": "#6"}, + "south": {"uv": [2, 8, 4, 10], "texture": "#6"}, + "west": {"uv": [0, 14, 11, 16], "texture": "#6"}, + "up": {"uv": [0, 12, 11, 14], "rotation": 90, "texture": "#6"}, + "down": {"uv": [0, 10, 11, 12], "rotation": 90, "texture": "#6"} + } + }, + { + "name": "mixerside4", + "from": [11.5, -2, 7], + "to": [13.5, 4, 9], + "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 7, 8]}, + "faces": { + "north": {"uv": [0, 2, 2, 8], "rotation": 180, "texture": "#6"}, + "east": {"uv": [2, 2, 4, 8], "texture": "#6"}, + "south": {"uv": [0, 2, 2, 8], "texture": "#6"}, + "west": {"uv": [4, 0, 6, 6], "texture": "#6"} + } + }, + { + "name": "mixerside3", + "from": [2.5, -2, 7], + "to": [4.5, 4, 9], + "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 7, 8]}, + "faces": { + "north": {"uv": [0, 2, 2, 8], "texture": "#6"}, + "east": {"uv": [4, 0, 6, 6], "texture": "#6"}, + "south": {"uv": [0, 2, 2, 8], "rotation": 180, "texture": "#6"}, + "west": {"uv": [2, 2, 4, 8], "texture": "#6"} + } + }, + { + "name": "mixerside2", + "from": [7, -2, 2.5], + "to": [9, 4, 4.5], + "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 7, 8]}, + "faces": { + "north": {"uv": [2, 2, 4, 8], "texture": "#6"}, + "east": {"uv": [0, 2, 2, 8], "texture": "#6"}, + "south": {"uv": [4, 0, 6, 6], "texture": "#6"}, + "west": {"uv": [0, 2, 2, 8], "rotation": 180, "texture": "#6"} + } + }, + { + "name": "mixerside1", + "from": [7, -2, 11.5], + "to": [9, 4, 13.5], + "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 7, 8]}, + "faces": { + "north": {"uv": [4, 0, 6, 6], "texture": "#6"}, + "east": {"uv": [0, 2, 2, 8], "rotation": 180, "texture": "#6"}, + "south": {"uv": [2, 2, 4, 8], "texture": "#6"}, + "west": {"uv": [0, 2, 2, 8], "texture": "#6"} + } + }, + { + "name": "mixertop1", + "from": [7, 4, 2.5], + "to": [9, 6, 13.5], + "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 7, 8]}, + "faces": { + "north": {"uv": [2, 0, 4, 2], "texture": "#6"}, + "east": {"uv": [0, 14, 11, 16], "rotation": 180, "texture": "#6"}, + "south": {"uv": [2, 0, 4, 2], "texture": "#6"}, + "west": {"uv": [0, 14, 11, 16], "rotation": 180, "texture": "#6"}, + "up": {"uv": [0, 10, 11, 12], "rotation": 90, "texture": "#6"}, + "down": {"uv": [0, 12, 11, 14], "rotation": 90, "texture": "#6"} + } + }, + { + "name": "mixertop2", + "from": [2.5, 4, 7], + "to": [13.5, 6, 9], + "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 7, 8]}, + "faces": { + "north": {"uv": [0, 14, 11, 16], "rotation": 180, "texture": "#6"}, + "east": {"uv": [2, 0, 4, 2], "texture": "#6"}, + "south": {"uv": [0, 14, 11, 16], "rotation": 180, "texture": "#6"}, + "west": {"uv": [2, 0, 4, 2], "texture": "#6"}, + "up": {"uv": [0, 10, 11, 12], "texture": "#6"}, + "down": {"uv": [0, 12, 11, 14], "texture": "#6"} + } + }, + { + "name": "polebase", + "from": [5, 7, 5], + "to": [11, 9, 11], + "shade": false, + "rotation": {"angle": 0, "axis": "y", "origin": [8, 9, 8]}, + "faces": { + "north": {"uv": [10, 6, 16, 8], "texture": "#6"}, + "east": {"uv": [10, 6, 16, 8], "texture": "#6"}, + "south": {"uv": [10, 6, 16, 8], "texture": "#6"}, + "west": {"uv": [10, 6, 16, 8], "texture": "#6"}, + "up": {"uv": [10, 0, 16, 6], "texture": "#6"}, + "down": {"uv": [10, 0, 16, 6], "texture": "#6"} + } + }, + { + "name": "Pole1Core", + "from": [6, 9, 6], + "to": [10, 19, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 16, 8]}, + "faces": { + "east": {"uv": [6, 6, 10, 16], "texture": "#mechanical_press_pole"}, + "west": {"uv": [6, 6, 10, 16], "texture": "#mechanical_press_pole"}, + "down": {"uv": [11, 1, 15, 5], "texture": "#mechanical_press_pole"} + } + }, + { + "name": "Pole1Side", + "from": [5, 9, 5], + "to": [11, 19, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 16, 8]}, + "faces": { + "north": {"uv": [0, 6, 6, 16], "texture": "#mechanical_press_pole"}, + "east": {"uv": [0, 6, 1, 16], "texture": "#mechanical_press_pole"}, + "south": {"uv": [0, 6, 6, 16], "texture": "#mechanical_press_pole"}, + "west": {"uv": [5, 6, 6, 16], "texture": "#mechanical_press_pole"}, + "down": {"uv": [10, 5, 16, 6], "texture": "#mechanical_press_pole"} + } + }, + { + "name": "Pole1Side", + "from": [5, 9, 10], + "to": [11, 19, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 16, 8]}, + "faces": { + "north": {"uv": [0, 6, 6, 16], "texture": "#mechanical_press_pole"}, + "east": {"uv": [0, 6, 1, 16], "texture": "#mechanical_press_pole"}, + "south": {"uv": [0, 6, 6, 16], "texture": "#mechanical_press_pole"}, + "west": {"uv": [5, 6, 6, 16], "texture": "#mechanical_press_pole"}, + "down": {"uv": [10, 0, 16, 1], "texture": "#mechanical_press_pole"} + } + }, + { + "name": "Pole2Core", + "from": [6, 19, 6], + "to": [10, 32, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 13, 8]}, + "faces": { + "east": {"uv": [6, 0, 10, 13], "texture": "#mechanical_press_pole"}, + "west": {"uv": [6, 0, 10, 13], "texture": "#mechanical_press_pole"}, + "up": {"uv": [11, 1, 15, 5], "rotation": 180, "texture": "#mechanical_press_pole"} + } + }, + { + "name": "Pole2Side", + "from": [5, 19, 10], + "to": [11, 32, 11], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 13, 8]}, + "faces": { + "north": {"uv": [0, 0, 6, 13], "texture": "#mechanical_press_pole"}, + "east": {"uv": [0, 0, 1, 13], "texture": "#mechanical_press_pole"}, + "south": {"uv": [0, 0, 6, 13], "texture": "#mechanical_press_pole"}, + "west": {"uv": [5, 0, 6, 13], "texture": "#mechanical_press_pole"}, + "up": {"uv": [10, 0, 16, 1], "rotation": 180, "texture": "#mechanical_press_pole"} + } + }, + { + "name": "Pole2Side", + "from": [5, 19, 5], + "to": [11, 32, 6], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 13, 8]}, + "faces": { + "north": {"uv": [0, 0, 6, 13], "texture": "#mechanical_press_pole"}, + "east": {"uv": [0, 0, 1, 13], "texture": "#mechanical_press_pole"}, + "south": {"uv": [0, 0, 6, 13], "texture": "#mechanical_press_pole"}, + "west": {"uv": [5, 0, 6, 13], "texture": "#mechanical_press_pole"}, + "up": {"uv": [10, 5, 16, 6], "rotation": 180, "texture": "#mechanical_press_pole"} + } + }, + { + "name": "Gear2", + "from": [-1, 13.5, 6.5], + "to": [17, 16.5, 9.5], + "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 15, 8]}, + "faces": { + "north": {"uv": [0, 0, 16, 3], "texture": "#1"}, + "east": {"uv": [0, 0, 3, 3], "texture": "#1"}, + "south": {"uv": [0, 0, 16, 3], "texture": "#1"}, + "west": {"uv": [0, 0, 3, 3], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 3], "texture": "#1"}, + "down": {"uv": [0, 0, 16, 3], "texture": "#1"} + } + }, + { + "name": "Gear2", + "from": [-1, 13.5, 6.5], + "to": [17, 16.5, 9.5], + "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 15, 8]}, + "faces": { + "north": {"uv": [0, 0, 16, 3], "texture": "#1"}, + "east": {"uv": [0, 0, 3, 3], "texture": "#1"}, + "south": {"uv": [0, 0, 16, 3], "texture": "#1"}, + "west": {"uv": [0, 0, 3, 3], "texture": "#1"}, + "up": {"uv": [0, 0, 16, 3], "texture": "#1"}, + "down": {"uv": [0, 0, 16, 3], "texture": "#1"} + } + }, + { + "name": "Gear4", + "from": [6.5, 13.5, -1], + "to": [9.5, 16.5, 17], + "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 15, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 3], "texture": "#1"}, + "east": {"uv": [0, 0, 16, 3], "texture": "#1"}, + "south": {"uv": [0, 0, 3, 3], "texture": "#1"}, + "west": {"uv": [0, 0, 16, 3], "texture": "#1"}, + "up": {"uv": [0, 0, 3, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 3, 16], "texture": "#1"} + } + }, + { + "name": "Gear4", + "from": [6.5, 13.5, -1], + "to": [9.5, 16.5, 17], + "rotation": {"angle": -22.5, "axis": "y", "origin": [8, 15, 8]}, + "faces": { + "north": {"uv": [0, 0, 3, 3], "texture": "#1"}, + "east": {"uv": [0, 0, 16, 3], "texture": "#1"}, + "south": {"uv": [0, 0, 3, 3], "texture": "#1"}, + "west": {"uv": [0, 0, 16, 3], "texture": "#1"}, + "up": {"uv": [0, 0, 3, 16], "texture": "#1"}, + "down": {"uv": [0, 0, 3, 16], "texture": "#1"} + } + }, + { + "name": "GearCaseInner", + "from": [2, 14, 2], + "to": [14, 16, 14], + "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 15, 8]}, + "faces": { + "north": {"uv": [0, 0, 12, 2], "texture": "#1"}, + "east": {"uv": [0, 0, 12, 2], "texture": "#1"}, + "south": {"uv": [0, 0, 12, 2], "texture": "#1"}, + "west": {"uv": [0, 0, 12, 2], "texture": "#1"}, + "up": {"uv": [2, 2, 14, 14], "texture": "#2"}, + "down": {"uv": [2, 2, 14, 14], "texture": "#2"} + } + }, + { + "name": "GearCaseOuter", + "from": [4, 13, 4], + "to": [12, 17, 12], + "rotation": {"angle": 22.5, "axis": "y", "origin": [8, 15, 8]}, + "faces": { + "north": {"uv": [0, 0, 8, 4], "texture": "#1"}, + "east": {"uv": [0, 0, 8, 4], "texture": "#1"}, + "south": {"uv": [0, 0, 8, 4], "texture": "#1"}, + "west": {"uv": [0, 0, 8, 4], "texture": "#1"}, + "up": {"uv": [4, 4, 12, 12], "texture": "#2"}, + "down": {"uv": [4, 4, 12, 12], "texture": "#2"} + } + }, + { + "name": "Top", + "from": [0, 17, 0], + "to": [16, 23, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 15, 8]}, + "faces": { + "north": {"uv": [0, 0, 16, 6], "texture": "#4"}, + "east": {"uv": [0, 0, 16, 6], "texture": "#4"}, + "south": {"uv": [0, 0, 16, 6], "texture": "#4"}, + "west": {"uv": [0, 0, 16, 6], "texture": "#4"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#11"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#2"} + } + }, + { + "name": "Bottom", + "from": [0, 9, 0], + "to": [16, 13, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 15, 8]}, + "faces": { + "north": {"uv": [0, 10, 16, 14], "texture": "#4"}, + "east": {"uv": [0, 10, 16, 14], "texture": "#4"}, + "south": {"uv": [0, 10, 16, 14], "texture": "#4"}, + "west": {"uv": [0, 10, 16, 14], "texture": "#4"}, + "up": {"uv": [0, 0, 16, 16], "texture": "#2"}, + "down": {"uv": [0, 0, 16, 16], "texture": "#11"} + } + }, + { + "name": "Side1", + "from": [0, 13, 0], + "to": [0, 17, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 15, 8]}, + "faces": { + "east": {"uv": [0, 6, 16, 10], "texture": "#4"}, + "west": {"uv": [0, 6, 16, 10], "texture": "#4"} + } + }, + { + "name": "Side2", + "from": [16, 13, 0], + "to": [16, 17, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 15, 8]}, + "faces": { + "east": {"uv": [0, 6, 16, 10], "texture": "#4"}, + "west": {"uv": [0, 6, 16, 10], "texture": "#4"} + } + }, + { + "name": "Side3", + "from": [0, 13, 16], + "to": [16, 17, 16], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 15, 8]}, + "faces": { + "north": {"uv": [0, 6, 16, 10], "texture": "#4"}, + "south": {"uv": [0, 6, 16, 10], "texture": "#4"} + } + }, + { + "name": "Side4", + "from": [0, 13, 0], + "to": [16, 17, 0], + "rotation": {"angle": 0, "axis": "y", "origin": [8, 15, 8]}, + "faces": { + "north": {"uv": [0, 6, 16, 10], "texture": "#4"}, + "south": {"uv": [0, 6, 16, 10], "texture": "#4"} + } + } + ], + "groups": [ + { + "name": "mixerhead", + "origin": [8, 8, 8], + "children": [0, 1, 2, 3, 4, 5, 6, 7, 8] + }, + { + "name": "mechanical_press_head", + "origin": [8, 8, 8], + "children": [9, 10, 11, 12, 13, 14, 15] + }, + { + "name": "mixer_base", + "origin": [8, 8, 8], + "children": [ + { + "name": "cogwheel", + "origin": [8, 8, 8], + "children": [16, 17, 18, 19] + }, + { + "name": "mixerbase", + "origin": [8, 8, 8], + "children": [20, 21, 22, 23, 24, 25] + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/item/wrench.json b/src/main/resources/assets/create/models/item/wrench.json new file mode 100644 index 000000000..65880cabe --- /dev/null +++ b/src/main/resources/assets/create/models/item/wrench.json @@ -0,0 +1,129 @@ +{ + "credit": "Made with Blockbench", + "parent": "block/block", + "ambientocclusion": false, + "textures": { + "0": "block/stripped_spruce_log", + "1": "block/spruce_log", + "2": "create:block/brass_casing", + "3": "block/andesite", + "particle": "block/stripped_spruce_log" + }, + "display": { + "thirdperson_righthand": { + "rotation": [0, -180, 0], + "translation": [0, 3.75, 0] + }, + "thirdperson_lefthand": { + "translation": [0, 3.75, 0] + }, + "firstperson_righthand": { + "rotation": [-4.5, 100.25, 10], + "translation": [1, 4, 1] + }, + "firstperson_lefthand": { + "rotation": [17.25, 267, 10], + "translation": [1, 4, 1] + }, + "ground": { + "rotation": [-90, 0, 0], + "translation": [0, -2.3, 0], + "scale": [0.76914, 0.76914, 0.76914] + }, + "gui": { + "rotation": [28, -163, 43], + "translation": [0.5, 0, 0], + "scale": [1.09453, 1.09453, 1.09453] + }, + "fixed": { + "rotation": [0, 160.5, 0], + "translation": [0.5, 0.5, 0] + } + }, + "elements": [ + { + "name": "handle", + "from": [7.5, 0, 7.5], + "to": [8.5, 14, 8.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8.5, 11, 8]}, + "faces": { + "north": {"uv": [1, 0, 2, 14], "texture": "#1"}, + "east": {"uv": [1, 0, 2, 14], "texture": "#1"}, + "south": {"uv": [1, 0, 2, 14], "texture": "#1"}, + "west": {"uv": [1, 0, 2, 14], "texture": "#1"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#1"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#1"} + } + }, + { + "name": "axle", + "from": [8.35355, 5, 7.14645], + "to": [9.35355, 12, 8.14645], + "rotation": {"angle": -45, "axis": "y", "origin": [8.5, 11, 8]}, + "faces": { + "north": {"uv": [5, 2, 6, 9], "texture": "#3"}, + "east": {"uv": [5, 2, 6, 9], "texture": "#3"}, + "south": {"uv": [0, 0, 1, 7], "texture": "#3"}, + "west": {"uv": [4, 3, 5, 10], "texture": "#3"}, + "up": {"uv": [0, 0, 1, 1], "texture": "#3"}, + "down": {"uv": [0, 0, 1, 1], "texture": "#3"} + } + }, + { + "name": "top thing", + "from": [7, 14, 7], + "to": [11, 15, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8.5, 11, 7]}, + "faces": { + "north": {"uv": [6, 1, 10, 2], "texture": "#2"}, + "east": {"uv": [6, 1, 8, 2], "texture": "#2"}, + "south": {"uv": [6, 1, 10, 2], "texture": "#2"}, + "west": {"uv": [6, 1, 8, 2], "texture": "#2"}, + "up": {"uv": [5, 0, 9, 2], "texture": "#2"}, + "down": {"uv": [6, 0, 10, 2], "texture": "#2"} + } + }, + { + "name": "bottom thing", + "from": [8, 12, 7], + "to": [11, 13, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [8.5, 11, 7]}, + "faces": { + "north": {"uv": [6, 1, 9, 2], "texture": "#2"}, + "east": {"uv": [6, 1, 8, 2], "texture": "#2"}, + "south": {"uv": [5, 1, 8, 2], "texture": "#2"}, + "west": {"uv": [7, 1, 9, 2], "texture": "#2"}, + "up": {"uv": [6, 0, 9, 2], "texture": "#2"}, + "down": {"uv": [7, 0, 10, 2], "texture": "#2"} + } + }, + { + "name": "gear case top", + "from": [7, 8, 7], + "to": [10, 9, 9], + "rotation": {"angle": 0, "axis": "y", "origin": [9, 11, 8]}, + "faces": { + "north": {"uv": [10, 0, 13, 1], "texture": "#2"}, + "east": {"uv": [7, 0, 9, 1], "texture": "#2"}, + "south": {"uv": [7, 0, 10, 1], "texture": "#2"}, + "west": {"uv": [9, 0, 11, 1], "texture": "#2"}, + "up": {"uv": [7, 0, 10, 2], "texture": "#2"}, + "down": {"uv": [6, 0, 9, 2], "texture": "#2"} + } + }, + { + "name": "gear case", + "from": [7.5, 6.5, 7], + "to": [9.5, 7.5, 9], + "rotation": {"angle": 45, "axis": "y", "origin": [8.5, 11, 8]}, + "faces": { + "north": {"uv": [0, 0, 2, 1], "texture": "#1"}, + "east": {"uv": [0, 0, 2, 1], "texture": "#1"}, + "south": {"uv": [0, 0, 2, 1], "texture": "#1"}, + "west": {"uv": [0, 0, 2, 1], "texture": "#1"}, + "up": {"uv": [0, 0, 2, 2], "texture": "#1"}, + "down": {"uv": [0, 0, 2, 2], "texture": "#1"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/item/wrench/gear.json b/src/main/resources/assets/create/models/item/wrench/gear.json new file mode 100644 index 000000000..355909cfb --- /dev/null +++ b/src/main/resources/assets/create/models/item/wrench/gear.json @@ -0,0 +1,65 @@ +{ + "credit": "Made with Blockbench", + "parent": "create:item/wrench", + "textures": { + "0": "block/stripped_spruce_log" + }, + "elements": [ + { + "name": "Cog", + "from": [8, 7, 6], + "to": [9, 8, 10], + "rotation": {"angle": -45, "axis": "y", "origin": [8.5, 7, 8]}, + "faces": { + "north": {"uv": [3, 6, 4, 7], "rotation": 180, "texture": "#0"}, + "east": {"uv": [5, 6, 9, 7], "rotation": 180, "texture": "#0"}, + "south": {"uv": [3, 6, 4, 7], "rotation": 180, "texture": "#0"}, + "west": {"uv": [5, 6, 9, 7], "rotation": 180, "texture": "#0"}, + "up": {"uv": [5, 6, 6, 10], "rotation": 180, "texture": "#0"}, + "down": {"uv": [5, 6, 6, 10], "rotation": 180, "texture": "#0"} + } + }, + { + "name": "Cog", + "from": [8, 7, 6], + "to": [9, 8, 10], + "rotation": {"angle": 45, "axis": "y", "origin": [8.5, 7, 8]}, + "faces": { + "north": {"uv": [3, 6, 4, 7], "rotation": 180, "texture": "#0"}, + "east": {"uv": [5, 6, 9, 7], "rotation": 180, "texture": "#0"}, + "south": {"uv": [3, 6, 4, 7], "rotation": 180, "texture": "#0"}, + "west": {"uv": [5, 6, 9, 7], "rotation": 180, "texture": "#0"}, + "up": {"uv": [5, 6, 6, 10], "rotation": 180, "texture": "#0"}, + "down": {"uv": [5, 6, 6, 10], "rotation": 180, "texture": "#0"} + } + }, + { + "name": "Cog", + "from": [8, 7, 6], + "to": [9, 8, 10], + "rotation": {"angle": 0, "axis": "y", "origin": [8.5, 7, 8]}, + "faces": { + "north": {"uv": [3, 6, 4, 7], "rotation": 180, "texture": "#0"}, + "east": {"uv": [5, 6, 9, 7], "rotation": 180, "texture": "#0"}, + "south": {"uv": [3, 6, 4, 7], "rotation": 180, "texture": "#0"}, + "west": {"uv": [5, 6, 9, 7], "rotation": 180, "texture": "#0"}, + "up": {"uv": [5, 6, 6, 10], "rotation": 180, "texture": "#0"}, + "down": {"uv": [5, 6, 6, 10], "rotation": 180, "texture": "#0"} + } + }, + { + "name": "Cog", + "from": [6.5, 7, 7.5], + "to": [10.5, 8, 8.5], + "rotation": {"angle": 0, "axis": "y", "origin": [8.5, 7, 8]}, + "faces": { + "north": {"uv": [3, 6, 7, 7], "rotation": 180, "texture": "#0"}, + "east": {"uv": [3, 6, 4, 7], "rotation": 180, "texture": "#0"}, + "south": {"uv": [3, 6, 7, 7], "rotation": 180, "texture": "#0"}, + "west": {"uv": [7, 4, 8, 5], "rotation": 180, "texture": "#0"}, + "up": {"uv": [5, 6, 9, 7], "rotation": 180, "texture": "#0"}, + "down": {"uv": [5, 6, 9, 7], "rotation": 180, "texture": "#0"} + } + } + ] +} \ No newline at end of file diff --git a/src/main/resources/assets/create/models/item/wrench/wrench.bbmodel b/src/main/resources/assets/create/models/item/wrench/wrench.bbmodel new file mode 100644 index 000000000..def095282 --- /dev/null +++ b/src/main/resources/assets/create/models/item/wrench/wrench.bbmodel @@ -0,0 +1 @@ +{"meta":{"format_version":"3.0","model_format":"java_block","box_uv":false},"name":"wrench","parent":"create:item/placement_handgun","ambientocclusion":true,"resolution":{"width":16,"height":16},"elements":[{"name":"handle","from":[7.5,0,7.5],"to":[8.5,14,8.5],"autouv":0,"color":1,"origin":[8.5,11,8],"faces":{"north":{"uv":[1,0,2,14],"texture":1},"east":{"uv":[1,0,2,14],"texture":1},"south":{"uv":[1,0,2,14],"texture":1},"west":{"uv":[1,0,2,14],"texture":1},"up":{"uv":[0,0,1,1],"texture":1},"down":{"uv":[0,0,1,1],"texture":1}},"uuid":"f41d6186-8865-2c76-59f2-99f71bda6878"},{"name":"top thing","from":[7,14,7],"to":[11,15,9],"autouv":0,"color":7,"origin":[8.5,11,7],"faces":{"north":{"uv":[6,1,10,2],"texture":2},"east":{"uv":[6,1,8,2],"texture":2},"south":{"uv":[6,1,10,2],"texture":2},"west":{"uv":[6,1,8,2],"texture":2},"up":{"uv":[5,0,9,2],"texture":2},"down":{"uv":[6,0,10,2],"texture":2}},"uuid":"95f11db2-f806-25cf-0a8a-ae2c5a7d9dbb"},{"name":"bottom thing","from":[8,12,7],"to":[11,13,9],"autouv":0,"color":7,"origin":[8.5,11,7],"faces":{"north":{"uv":[6,1,9,2],"texture":2},"east":{"uv":[6,1,8,2],"texture":2},"south":{"uv":[5,1,8,2],"texture":2},"west":{"uv":[7,1,9,2],"texture":2},"up":{"uv":[6,0,9,2],"texture":2},"down":{"uv":[7,0,10,2],"texture":2}},"uuid":"11a2771f-be0d-ba79-b40a-6bc320a73032"},{"name":"gear case top","from":[7,8,7],"to":[10,9,9],"autouv":0,"color":7,"origin":[9,11,8],"faces":{"north":{"uv":[10,0,13,1],"texture":2},"east":{"uv":[7,0,9,1],"texture":2},"south":{"uv":[7,0,10,1],"texture":2},"west":{"uv":[9,0,11,1],"texture":2},"up":{"uv":[7,0,10,2],"texture":2},"down":{"uv":[6,0,9,2],"texture":2}},"uuid":"4506aa5b-9b1b-1ed6-8b6c-f2e27ad3ae9b"},{"name":"axle","from":[8.353553390593273,5,7.146446609406727],"to":[9.353553390593273,12,8.146446609406727],"autouv":0,"color":1,"rotation":[0,-45,0],"origin":[8.5,11,8],"faces":{"north":{"uv":[5,2,6,9],"texture":3},"east":{"uv":[5,2,6,9],"texture":3},"south":{"uv":[0,0,1,7],"texture":3},"west":{"uv":[4,3,5,10],"texture":3},"up":{"uv":[0,0,1,1],"texture":3},"down":{"uv":[0,0,1,1],"texture":3}},"uuid":"d9f02155-4ddc-75bb-2c9d-a99bb3463e39"},{"name":"gear case","from":[7.5,6.5,7],"to":[9.5,7.5,9],"autouv":0,"color":7,"rotation":[0,45,0],"origin":[8.5,11,8],"faces":{"north":{"uv":[0,0,2,1],"texture":1},"east":{"uv":[0,0,2,1],"texture":1},"south":{"uv":[0,0,2,1],"texture":1},"west":{"uv":[0,0,2,1],"texture":1},"up":{"uv":[0,0,2,2],"texture":1},"down":{"uv":[0,0,2,2],"texture":1}},"uuid":"fc2bb8a5-1331-14f9-d29f-57a6e4172874"},{"name":"Cog","from":[8,7,6],"to":[9,8,10],"autouv":0,"color":0,"rotation":[0,-45,0],"origin":[8.5,7,8],"faces":{"north":{"uv":[3,6,4,7],"rotation":180,"texture":0},"east":{"uv":[5,6,9,7],"rotation":180,"texture":0},"south":{"uv":[3,6,4,7],"rotation":180,"texture":0},"west":{"uv":[5,6,9,7],"rotation":180,"texture":0},"up":{"uv":[5,6,6,10],"rotation":180,"texture":0},"down":{"uv":[5,6,6,10],"rotation":180,"texture":0}},"uuid":"feb916ab-cb3f-19d4-d4ac-ce15d5aecd24"},{"name":"Cog","from":[8,7,6],"to":[9,8,10],"autouv":0,"color":3,"origin":[8.5,7,8],"faces":{"north":{"uv":[3,6,4,7],"rotation":180,"texture":0},"east":{"uv":[5,6,9,7],"rotation":180,"texture":0},"south":{"uv":[3,6,4,7],"rotation":180,"texture":0},"west":{"uv":[5,6,9,7],"rotation":180,"texture":0},"up":{"uv":[5,6,6,10],"rotation":180,"texture":0},"down":{"uv":[5,6,6,10],"rotation":180,"texture":0}},"uuid":"fc83063d-febf-aee3-4771-86572cad1982"},{"name":"Cog","from":[8,7,6],"to":[9,8,10],"autouv":0,"color":7,"rotation":[0,45,0],"origin":[8.5,7,8],"faces":{"north":{"uv":[3,6,4,7],"rotation":180,"texture":0},"east":{"uv":[5,6,9,7],"rotation":180,"texture":0},"south":{"uv":[3,6,4,7],"rotation":180,"texture":0},"west":{"uv":[5,6,9,7],"rotation":180,"texture":0},"up":{"uv":[5,6,6,10],"rotation":180,"texture":0},"down":{"uv":[5,6,6,10],"rotation":180,"texture":0}},"uuid":"b64cf2bf-9ac4-24ae-9079-0bb04e30a01a"},{"name":"Cog","from":[6.5,7,7.5],"to":[10.5,8,8.5],"autouv":0,"color":6,"origin":[8.5,7,8],"faces":{"north":{"uv":[3,6,7,7],"rotation":180,"texture":0},"east":{"uv":[3,6,4,7],"rotation":180,"texture":0},"south":{"uv":[3,6,7,7],"rotation":180,"texture":0},"west":{"uv":[7,4,8,5],"rotation":180,"texture":0},"up":{"uv":[5,6,9,7],"rotation":180,"texture":0},"down":{"uv":[5,6,9,7],"rotation":180,"texture":0}},"uuid":"f132aba1-28e7-4b8a-ffe4-9139ffe048a9"}],"outliner":["f41d6186-8865-2c76-59f2-99f71bda6878","d9f02155-4ddc-75bb-2c9d-a99bb3463e39","95f11db2-f806-25cf-0a8a-ae2c5a7d9dbb","11a2771f-be0d-ba79-b40a-6bc320a73032","4506aa5b-9b1b-1ed6-8b6c-f2e27ad3ae9b","fc2bb8a5-1331-14f9-d29f-57a6e4172874","feb916ab-cb3f-19d4-d4ac-ce15d5aecd24","b64cf2bf-9ac4-24ae-9079-0bb04e30a01a","fc83063d-febf-aee3-4771-86572cad1982","f132aba1-28e7-4b8a-ffe4-9139ffe048a9"],"textures":[{"path":"D:\\simon\\Minecraft\\Minecraft Assets\\minecraft\\textures\\block\\stripped_spruce_log.png","name":"stripped_spruce_log.png","folder":"block","namespace":"minecraft","id":"0","particle":true,"mode":"link","saved":true,"uuid":"18b56023-22d1-3743-fca4-09b5521d9a5c"},{"path":"D:\\simon\\Minecraft\\Minecraft Assets\\minecraft\\textures\\block\\spruce_log.png","name":"spruce_log.png","folder":"block","namespace":"minecraft","id":"1","particle":false,"mode":"link","saved":true,"uuid":"7b7b3c39-c6f6-4982-b9bb-2f8ca03394ac"},{"path":"C:\\Users\\simon\\Desktop\\Forge\\Create\\src\\main\\resources\\assets\\create\\textures\\block\\brass_casing.png","name":"brass_casing.png","folder":"block","namespace":"create","id":"2","particle":false,"mode":"link","saved":true,"uuid":"8ed78919-82aa-35a4-8894-b02e40f46b06"},{"path":"D:\\simon\\Minecraft\\Minecraft Assets\\minecraft\\textures\\block\\andesite.png","name":"andesite.png","folder":"block","namespace":"minecraft","id":"3","particle":false,"mode":"link","saved":true,"uuid":"b8b10c08-30ef-39e6-dd58-8511f63964c1"}]} \ No newline at end of file diff --git a/src/main/resources/assets/create/textures/block/basin.png b/src/main/resources/assets/create/textures/block/basin.png new file mode 100644 index 0000000000000000000000000000000000000000..470fc5edfb5aa72a3b6f674f6cf0925e9f374272 GIT binary patch literal 816 zcmV-01JC@4P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E;2FkAZe8V00N*%L_t(oN9~nuPvSrj$NQN~j29CWvCwYi z;f$IH5qT(bT+I0ZcP8@U?gR57#{Erio6Ih&>Y zna`JS{_OfZuf=C`fQ#|QH#Y*=M0wnrBA9Qr&Xn`>OXa%TU&8sptp#Ged~ng?*XEo6 z`}5udIaENAQtbRr^Yaeci7#K^Er?A83kFhr?J4kK&PzyxnUGh;34m4Q0?DN^I@HAhB80>kX7q9NRg%HB?a- z7j0!70mP~R5>cex?#kumm5%N9mGtc#bUKMYnM)w1`!~s20!YLWM5Zob7>UubuFp}_ zkY=+b^?J+NO$mZX!KV1S9nd2n2~e!jXvyj6nc9djreW{+R~3Lb=J21Kv{bYcu+}Z$ zBf_rPv5rwaErgJ?Bi3g3VR#}C_SP&Tdd97<<{98FWQhbW?9;ba!ELWdLwtX>N2bZe?^J zG%heMGBNQWX_Wu~0S`$;K~y+TrIJBw!axv(gHVu4K@hBm(&DLwf*|5We}l(fgr0=p z!Gj1*QzRNQn!7>aeN;9s3Mu-Ls-y6)R_so0^-Wc&g=jBnsf*O!yxlXhbfcV942$;=h z7!m@K3fmeZ$Bwk<6X1{U>i7sbQsqpl-+=UMKu5dAp$xK w;9KOoXzc-j0HUpDed~eJ2Hiuc`FF@W0bimPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E;2FkAZe8V00BlxL_t(IPmPnoii1E5hUcYvFTOz$(Sx;m z@?nGlm9iB)EK<67s0h7y@!7I|v&>?rE?wbgVkY^MKT)N1B~?|)_4*~__zvNNVqB3BOY+`MbWaR-j87SH>%kl}V*8U^z-3tL*V35p$ zFAy67*1Nvr1TO^BG(A-v9sr literal 0 HcmV?d00001 diff --git a/src/main/resources/data/create/loot_tables/blocks/basin.json b/src/main/resources/data/create/loot_tables/blocks/basin.json new file mode 100644 index 000000000..12b44e184 --- /dev/null +++ b/src/main/resources/data/create/loot_tables/blocks/basin.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "create:basin" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file diff --git a/src/main/resources/data/create/loot_tables/blocks/mechanical_mixer.json b/src/main/resources/data/create/loot_tables/blocks/mechanical_mixer.json new file mode 100644 index 000000000..a18c98604 --- /dev/null +++ b/src/main/resources/data/create/loot_tables/blocks/mechanical_mixer.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:block", + "pools": [ + { + "rolls": 1, + "entries": [ + { + "type": "minecraft:item", + "name": "create:mechanical_mixer" + } + ], + "conditions": [ + { + "condition": "minecraft:survives_explosion" + } + ] + } + ] +} \ No newline at end of file